Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Datatypes C

Pagina: 1
Acties:

  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Goedemorgen,

Ik heb een kort vraagje ivm datatypes in C...
Ik weet dat een integer gebruikt wordt voor een geheel getal (als deze in 32 bit opgeslagen wordt dacht ik dat de verzameling gelegen is tussen -2^32 en +2^32)
Maar wat is dan juist een double en een float
Zijn dit gewoon nog grotere deelverzamelingen dan een intgeger of..?

Alvast bedankt!

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een signed integer waar jij op doelt loopt van -231 tot 231-1.

Maar waarom raadpleeg je niet gewoon even Wikipedia :? Daar staat het gewoon op en is met 1 zoekopdracht (evenals via Google) zo gevonden: Wikipedia: Integer en Wikipedia: Floating point. En sterker nog: we hebben gewoon een FAQ die hier over gaat: Getallen en talstelsels FAQ -> Floats (ook wel drijvende komma of zwevende komma getallen).

[ Voor 35% gewijzigd door RobIII op 03-12-2013 10:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Wauw, bedankt.. Raar maar waar, ik zat een paar seconde geleden op wikipedia.. Alleen op andere pagina's.
Toch bedankt voor het antwoord :)!

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tommienator schreef op dinsdag 03 december 2013 @ 10:26:
Ik weet dat een integer gebruikt wordt voor een geheel getal (als deze in 32 bit opgeslagen wordt dacht ik dat de verzameling gelegen is tussen -2^32 en +2^32)
Hoe het wel zit staat wel in leesvoer, maar los daarvan: Kijk eens goed naar wat je hier zegt. Als een bit 2 opties heeft, heb je er met 32 bits uiteraard 2^32 mogelijkheden in totaal. Als jij 'tussen -2^32 en +2^32' zegt, hoe onthoud je dan of het een positief of negatief getal is? B)

{signature}


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Klopt volledig!
Laten we even vereenvoudigen.. Even overgaan naar 4-bit.. Rekent wat sneller en vlotter :D?

Dus als ik het goed heb..
Als je in 4-bit werkt, heb je een verzameling gelegen tussen -8 en +7
en die kan worden voorgesteld (neem ik aan, even dan uit jouw antwoord en wat logisch redeneren :p) -2^(4-1) <=n<=2^(4-1)-1?
Klopt dit, want dan heb ik het door denk ik ^^...

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Tommienator schreef op dinsdag 03 december 2013 @ 11:12:
Klopt volledig!
Laten we even vereenvoudigen.. Even overgaan naar 4-bit.. Rekent wat sneller en vlotter :D?

Dus als ik het goed heb..
Als je in 4-bit werkt, heb je een verzameling gelegen tussen -8 en +7
en die kan worden voorgesteld (neem ik aan, even dan uit jouw antwoord en wat logisch redeneren :p) -2^(4-1) <=n<=2^(4-1)-1?
Klopt dit, want dan heb ik het door denk ik ^^...
Ja dat klopt.
Nee dat klopt niet. je hebt aan beide kanten 7. Je hebt 4 bits tot je beschikking om een getal uit te drukken en het teken. Je teken, positief (1) of negatief (0) neemt 1 bit in. je houd dus nog 3 bits over waarin je maximaal 7 kan uitdrukken (111) dus je hebt een bereik van -7(0111) tot en met +7 (1111). Dus je uitdrukking mist aan de linker kant een -1. resultaat: -2^(4-1)-1 <=n<=2^(4-1)-1

[ Voor 6% gewijzigd door Ealanrian op 03-12-2013 11:25 . Reden: Iets met niet wakker, te weinig koffie en slecht nadenken ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
offtopic:
Omdat je niet zowel -0 als +0 hebt, gaat het negatieve bereik doorgaans eentje verder. Maar goed, dat staat op diverse plekken beter uitgelegd. :P

{signature}


  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Oké, even 1 algemene regel in de wiskunde..
Ik dacht nu toch echt dat 1 voor negatief stond, en 0 voor positief?

Dan kan bij
resultaat: -2^(4-1)-1 <=n<=2^(4-1)-1
die -2^(4-1)-1 die -1 toch weg?
Voutloos schreef op dinsdag 03 december 2013 @ 11:22:
offtopic:
Omdat je niet zowel -0 als +0 hebt, gaat het negatieve bereik doorgaans eentje verder. Maar goed, dat staat op diverse plekken beter uitgelegd. :P
Dus dan klopt het wel neem ik aan?

[ Voor 42% gewijzigd door Tommienator op 03-12-2013 11:23 ]

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • Ealanrian
  • Registratie: Februari 2009
  • Nu online
Zoals Voutloos mooi aanwijst heb je geen -0 en +0. Ik ben nog niet wakker genoeg je had het wel goed door...

  • Tommienator
  • Registratie: Maart 2011
  • Laatst online: 10-05-2024
Ealanrian schreef op dinsdag 03 december 2013 @ 11:25:
Zoals Voutloos mooi aanwijst heb je geen -0 en +0. Ik ben nog niet wakker genoeg je had het wel goed door...
Bedankt ;).

"Small minds discuss persons. Average minds discuss events. Great minds discuss ideas. Really great minds discuss mathematics."


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 22-11 21:50

deadinspace

The what goes where now?

RobIII schreef op dinsdag 03 december 2013 @ 10:31:
Een signed integer waar jij op doelt loopt van -231 tot 231-1.
Voutloos schreef op dinsdag 03 december 2013 @ 11:22:
Omdat je niet zowel -0 als +0 hebt, gaat het negatieve bereik doorgaans eentje verder. Maar goed, dat staat op diverse plekken beter uitgelegd. :P
Het is een klein beetje mierenneuken, maar die opmerkingen gelden alleen als de binaire representatie van integers in je C implementatie two's complement is. Bij one's complement of sign-magnitude loopt het bereik (bij 32 bit) van van -231+1 tot 231-1 en heb je zowel een +0 als -0. Zie bijvoorbeeld deze tabel op Wikipedia.

En ja, dat zijn toegestane representaties in C ;)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
deadinspace schreef op dinsdag 03 december 2013 @ 13:03:
Het is een klein beetje mierenneuken
Het is ook een beetje mierenneuken dat een "integer" niet per definitie 32 bits is en zo kan ik nog wel 15 dingen verzinnen (bij wijze van) die niet opgaan als je niet een paar aannames doet (zoals ik er van uit ben gegaan dat men meestal op scholen leert dat een int 32 bits is, two's complement gebruikt wordt, uitgegaan wordt van little-endian etc. etc.). Hence de "waar jij op doelt" in mijn post ;)

[ Voor 5% gewijzigd door RobIII op 03-12-2013 16:56 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Amanoo
  • Registratie: December 2007
  • Laatst online: 29-10 17:28

Amanoo

Cᴀᴛs ᴀʀᴇ ɴɪᴄᴇ.

Integer is een heel getal. Aantal bits wisselt sterk per architectuur. Floats en doubles zijn de ICT equivalent van wetenschappelijke notatie. Dit kunnen vrij grote getallen zijn, of juist kleine kommagetallen. Op een gegeven moment kan het gebeuren dat je enige precisie kwijtraakt. Zo kan het zijn dat je het getal 8 wil hebben, maar dit wordt opgeslagen als 7,9999999999999. Hier moet je soms rekening mee houden, vooral als je dingen naar elkaar gaat casten (als je van 7,999999999 een integer maakt wordt deze ineens 7, hij rondt namelijk af naar 0). In veel gevallen houd je er geen rekening mee,als je floats deelt door elkaar boeit het doorgaans niet of het 7,999999 of 8 is, maar je moet het wel even in je achterhoofd houden. Integers/longs zijn het nauwkeurigst, maar je kan er enkel een vrij beperkt aantal hele getallen mee uitdrukken.

Floats en doubles hebben een bepaalde structuur, met mantissa en exponent. In wetenschappelijke notatie heb je het over 1,42784*10^3, bijvoorbeeld. De mantissa is 1,42784, de exponent 3. Hiermee kan je zowel kleine getallen uitdrukken (bijvoorbeeld 5,4389^10^-20) als hele grote (bijvoorbeeld 3,489348*10^20. negatieve getallen kunnen natuurlijk ook. Je kan hiermee met relatief weinig decimalen toch een enorme range van getallen uitdrukken, groter dan met ints, maar je offert hier wel wat nauwkeurigheid voor op. Natuurlijk rekent een computer niet met decimalen, maar met bits van 1 of 0, en niet met base 10, maar met base 2 (want het is een binair systeem). Verder heeft het qua structuur veel van elkaar weg.

Verschil tussen double en float is dat een double een zogenaamd double precision floating point is. Komt er op neer dat double wat meer ruimte inneemt maar je er ook wat meer mee kan. Ik ben geen steen in uitleggen, maar ik hoop dat het duidelijker is.

[ Voor 5% gewijzigd door Amanoo op 03-12-2013 17:09 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Volgens mij leg je niets uit wat niet hier ook al staat:
;) :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zélfs die staat in de inmiddels meermaals aangehaalde FAQ ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1