Autor | Zpráva | ||
---|---|---|---|
LuBoss Profil * |
#1 · Zasláno: 13. 4. 2008, 15:58:31
zdravim,
mam takyto problem window.alert(0.2564*1000000000); mi vypise 256400000.00000003 co je samozrejme nespravne ale uz napriklad window.alert(0.2565*1000000000); vypise spravne 256500000 narazil som uz na viac kombinacii takych cisel, ktore ked vynasobim, javascript vypisuje nespravny vysledok, chcel by som vediet od coho to zavisi, co to sposobuje, popripade ako to vyriesit aby bol dany vysledok spravny |
||
los Profil * |
#2 · Zasláno: 13. 4. 2008, 19:09:11
JavaScript samozrejme vie počítať, ale presnosť výpočtov (nie len v JavaScripte) je obmedzená tým, ako sú čísla reprezentované v pamäti a ako sú definované operácie (viď IEEE 754).
Nestačí ti to zaokrúhliť? |
||
LuBoss Profil * |
#3 · Zasláno: 14. 4. 2008, 00:09:39
No zaokruhlovat bych to nechcel skusal som to riesit pomocou toFixed(), co chvilku vyzeralo ze aj funguje. Napriklad ked som nasobil 81.66 * 15 co v javascripte vypisuje 1224.8999999999999 tak som to vyriesil nasledovne (81.66 * 15).toFixed(8)*1, to uz vracalo spravnu hodnotu(1224.9). Lenze v inom pripade (0.2564*1000000000).toFixed(8)*1 uz nefungovalo, nahradil som to (0.2564*1000000000).toFixed(7)*1 a zas mi to fungovalo.
Avsak otazka je dokedy, kym zas nenarazim na cisla pri ktorych to nepojde. Rozhodne chcem aby mi tam ostali minimalne 4 desatinne cisla, cize mozem pouzit maximalne toFixed(4) co mi zatial aj bez problemov funguje ale otazka je, ci sa na to mozem spoliehat, alebo sa zas vyskytnu cisla pri ktorych to fungovat nebude. |
||
peta Profil |
#4 · Zasláno: 14. 4. 2008, 08:54:37
Rozhodne zajimave :)
<script> document.writeln('<pre>'); document.writeln(81.66 * 14); document.writeln(81.66 * 15); document.writeln(Math.exp(Math.log(81.66 * 14))); document.writeln(Math.exp(Math.log(81.66 * 15))); document.writeln('<\/pre>'); </script> 1143.24 1224.8999999999999 1143.24 1224.9000000000003 Nejdriv jsem si myslel, ze to souvisi nejak s hranici 1024, ale asi to bude fakt problem matematickych operaci. Dela mi to FF, dela mi to IE, sranda :) V nejake kalkulacce na netu jsem videl script na pocitani malych cisel pro hyp-sin a hyp-cos. Treba by se to dalo pouzit. |
||
matus Profil * |
#5 · Zasláno: 14. 4. 2008, 16:19:20
ide o to,ze procesor pozna len nuly a jednotky,a len cele cisla...kazdy pocitac ma takzvane strojove epsilon...cize cislo ktore ked k nicomu pripocitate tak sa hodnota nezmeni...toto strojove epsilon vyjadruje akusi presnost pri pocitani s desatinnymi cislami...takto to funguje aspon v cecku,ale tu to bude asi to iste
|
||
Časová prodleva: 16 let
|
0