Portál AbcLinuxu, 26. dubna 2024 14:50


Dotaz: javascript math.floor chybne počíta

7.9.2011 00:22 adrinko | skóre: 22
javascript math.floor chybne počíta
Přečteno: 246×
Odpovědět | Admin
zdravím všetkých, zistil som, že takáto vec Math.floor( 100.05/(5/100) ) vráti výsledok 2000 namiesto 2001. ale na počudovanie toto Math.floor( 10.05/(5/100) ) vráti správnu hodnotu 201.

Neviete prečo mi to pri vyšších číslach zle počíta?

vďaka vopred

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.9.2011 00:38 rada
Rozbalit Rozbalit vše Re: javascript math.floor chybne počíta
Odpovědět | | Sbalit | Link | Blokovat | Admin
Počítá to správně podle IEEE. 1/20 není přesně represnetovatelná a je tedy representována nejbližším representovatelným číslem, které je zde o trošku větší. Výslede x/0.05 je pak opět representován nejbližším representovatelným číslem.
7.9.2011 00:59 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: javascript math.floor chybne počíta
fúha a dá sa to nejako ošetriť, aby to počítalo správne?
pavlix avatar 7.9.2011 02:01 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: javascript math.floor chybne počíta
Leda nějakou (pomalou) knihovnou pro výpočty v desítkové soustavě.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
7.9.2011 12:19 l4m4
Rozbalit Rozbalit vše Re: javascript math.floor chybne počíta
Nebo ještě lépe knihovnou pro práci s racionálními čísly. Za předpokladu, že se používají pouze algebraické oprace, je to sice pomalé, ale výsledek je vždy přesný (což desítkový rozvoj nezaručuje).
7.9.2011 12:39 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: javascript math.floor chybne počíta

Nestacilo by jen zmenit poradi operaci? Takhle napred deli (zavorka 5/100) a potom zase deli (100.05 / 0.05). Co kdyby to podle pravidel pocitani se zlomky napred vynasobil a teprve potom delil? Dostal by z toho

((100.05 * 100) / 5) = (10005 / 5)
Nevim, jak moc je JS chytry v otazce optimalizaci matematickych postupu, tak mozna je moje rada mimo, ale treba by to mohlo pomoct :-)

Dejv

Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
7.9.2011 13:11 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: javascript math.floor chybne počíta
Nestacilo by jen zmenit poradi operaci?
Nestačilo. Čísla s plovoucí řádovou čárkou nereprezentují reálná čísla přesně, toto omezení je součástí návrhu tohoto typu. Takže pokud chcete počítat přesně, je potřeba použít jiný typ. Jiné pořadí operací může pro nějaká čísla dát „správný“ výsledek, ale pro jiná dá zase „špatný“.*)

*) „Správný“ a „špatný“ myšleno z pohledu výpočtu s reálnými čísly. Ty operace dávají ve skutečnosti správný výsledek podle standardu výpočtu v plovoucí řádové čárce – chyba je na straně programátora, pokud předpokládá, že výsledek bude shodný s výpočtem s reálnými čísly.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.