Autor Zpráva
Feryy
Profil *
Zdravím,

mám problém s funkcí Math.pow
Math.pow(0.00276,300);

Pokud ji využívám s desetinnou čárkou, nefunguje mi. Nevíte, jak se to dá obejít?

Díky
Radek9
Profil
Feryy:
Vždyť už tam máš desetinnou tečku. V tomto případě mocníš 0.00276 na 300. V čem je problém?
_es
Profil
Feryy:
nefunguje mi
To znamená čo?
V tvojom kóde je výpočet tristej mocniny 0.00276, čo je skoro nula. JS nepoužíva formát ukladania čísel, ktorý by umožňoval zapísať také malé číslo, preto bude výsledkom 0.
Feryy
Profil *
Radek9:
Ano, ale výsledek je vždy 0, což je špatně.


_es:
A dá se to nějak obejít? Pokud mám tento příklad v php, tak mi to vychází v pořádku.

  function Mocnina($Zaklad, $Exp) {                 // řádek 1
    if ($Exp) {                                     // řádek 2
      return $Zaklad * Mocnina($Zaklad, $Exp - 1);  // řádek 3
    }                                               // řádek 4
    return 1;                                       // řádek 5
  }
_es
Profil
Feryy:
Ano, ale výsledek je vždy 0, což je špatně.
Nie, je to správne. S pravítkom tiež neodmeráš rozmery atómov.

Pokud mám tento příklad v php, tak mi to vychází v pořádku.
S rovnakými číslami? To bude asi tiež nula. Okrem toho, PHP na takéto výpočty asi má nejaké vstavané funkcie a netreba používať hentaké podivné.

A dá se to nějak obejít?
Vymysli si nejaký vlastný formát čísel, vlastné funkcie na výpočty s nimi a vlastné funkcie na ich výpis.
Joker
Profil
Feryy:
ale výsledek je vždy 0, což je špatně
Je to správně, resp. jde o principiálně tutéž situaci, jako když si ten výpočet zadáte na stolní kalkulačce a vyjde taky 0. Reálných čísel je na jakémkoliv intervalu nekonečně mnoho, takže je logicky nelze všechny reprezentovat konečně velkou pamětí.

Viz také Výsledkem výpočtu 1 - 0.9 není přesně 0.1 v častých dotazech.

V některých případech (pokud extrémně malá čísla vycházejí jen v nějaké části výpočtu a pozdějšími operacemi zase narostou) může pomoci úprava postupu výpočtu.

Pro zajímavost, to číslo je přibližně:
0,00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187

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: