Double THAT!
Kateri cepec je napisal funkcijo imenovano atof(), ki vrača double vrednost? Prihranil bi mi tri ure dragocenega časa, če bi funkcijo imenoval atod()!
Kateri cepec je napisal funkcijo imenovano atof(), ki vrača double vrednost? Prihranil bi mi tri ure dragocenega časa, če bi funkcijo imenoval atod()!
3 thoughts on “Double THAT!”
bwahahaha… sam si si kriv, atof() namreč nihče pri zdravi pameti ne uporablja, ker je butasta in je z njeno rabo nemogoče ugotoviti, če je pri pretvorbi prišlo do napake. že davno bi jo moral nekdo zabrisat ven iz standardnega C runtimea!
pravi moški uporabljajo strtod(), pri tej pa je d prav jasen in njena semantika popolnoma nedvoumna tudi v primeru napake!
po drugi strani pa mi tudi ni čisto jasno, zakaj bi imel težave, če bi rekel
float f = atof(“123.456”);
prevajalnik tako ali tako poskrbi za implicitni cast in meni ta primer deluje brez kakršnekoli težave. ahaha, pa ne, da nisi vključil stdlib.h in zato prevajalnik ne pozna tipa vrnjene vrednosti ter ne zmore narediti pretvorbe? sam si si kriv, že drugič!
zdi se mi, da bi se vprašanje moralo glasiti nekoliko drugače. v prvi osebi bi ga moral postaviti: čemu sem tak cepec, da nisem vključil stdlib.h ali pa uporabil strtod(), prihranil bi si tri ure dragocenega časa! 😉
Nucal sem nekaj preprostega, preverjanja napak ne nucam, ker ga opravljam drugje. stdlib.h je bil includan, uporabljal sem pa float zato, ker nimam potrebe po 64 bitih, mi jih je 32 povsem dovolj, se prevec. 😛 00.0000 je vhodni format.
Zelo verjetno je problem tudi v compilerju. Saj mi je crknilo tole:
[c]
float f = atof(“60.0245”);
printf(“%f\n”, f);
printf(“%f\n”, f);
[/c]
Najbolj hecno je to, da je pri prvem printf() klicu program izpisal 60.024500, pri vsakem naslednjem pa 60.024502.
Se vedno pa je narobe to, da je atof imenovan atof… 🙂
No, tole je G++ izpljunil:
[c]
#include
#include
int main()
{
float f = atof(“50.2045”);
printf(“%f\n”, f);
printf(“%f\n”, f);
return 0;
}
[/c]
bigwhale@lovro ~ $ ./la
50.204498
50.204498
Comments are closed.