Autor Zpráva
LuBoss
Profil *
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 *
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 *
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
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 *
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

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0