Miért nem működik ez a C kód?
#<math.h>
#<stdio.h>
int main(){
double szam;
szam = pow(2,1000);
printf("szam: %lf\n", szam);
return 0;}
20 számjegyig jó, utána csak nullákat ír. Netről szedett kód, ott - elvileg - kiírta végig a számokat a feltöltőnek...





Nem, ez egy időgép kódja, csak az include szavakat kihagytam belőle.
szerinted? :D





Használj valami értelmesebb fordítót ami ki tudja írni normálisan a lebegőpontos számokat (pl. gcc). Microsoft szerint nem kell tudnod 17 jegy után hogy mi következik.
A printf függvénynél pedig %f van double-re, nincs %lf...















"Egy double típusú változó pontossága kb 17 tizedesjegy.. ennyi a titok."
Ez nem titok, csak butaság. A mantissza pontossága 16 jegy, nem a lebegőpontos számé.
Az 1*2^1000 szám esetén a mantissza 1, az exponens 1000. A double 64 bitje 1 bit előjel, 11 bit exponens, 52 bit mantissza, így a 2^1000 könnyedén elfér a double típusban, ami kiírva decimális alakban több mint 300 jegy hosszú. Az már más kérdés hogy a printf ki is írja e neked. A gcc kiírja, a VC++ nem (azt nem tudom hogy az MSVCRT-t használó Mingw-vel mi a helyzet).
A Microsoft döntése volt hogy 20 jegy után 0-kat ír ki ami egyrészt azért értelmetlen mert akkor inkább dobjon oda egy exponens tagot minthogy megszámlálhatatlanul sok 0-t ír ki, másrészt pedig akkor iratom ki ilyen hosszan ha kíváncsi vagyok a jegyekre, egyébként a %g vagy %e formátummal írnám ki.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!