Kezdőoldal » Számítástechnika » Programozás » Miért nem működik ez a C kód?

Miért nem működik ez a C kód?

Figyelt kérdés

#<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...


2016. máj. 13. 20:13
 1/8 anonim ***** válasza:
22%
Számítógépes kód ez? Mert nekem hasonlít az Arduino kódjához.
2016. máj. 13. 20:57
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:

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


szerinted? :D

2016. máj. 13. 21:04
 3/8 anonim ***** válasza:
100%

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...

2016. máj. 13. 21:09
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:
Egy double típusú változó pontossága kb 17 tizedesjegy.. ennyi a titok.
2016. máj. 14. 23:03
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

A GCC jól kezeli:

* [link]

* [link]

* [link]


a clang is:

[link]


egy online Visual C fordító is több számjeggyel operál:

[link]

2016. máj. 14. 23:46
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

"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.

2016. máj. 15. 03:52
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:
Én Codeblocksban futtattam.
2016. máj. 15. 19:21
 8/8 A kérdező kommentje:
Win10 alatt.
2016. máj. 15. 19:23

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!