Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JavaScript - funkce Math.pow(x, y)

Nemáte tušení proč to háže výsledek NaN (not a number)?

Toto funguje:

a = 2;
b = 3;
alert (Math.pow(a, b));   // Vytiskne 8

Toto funguje a dela to co cekam.

Tento slozitejsi pripad ale zlobi:

aktualniHodnota = 1;
exponent = 0.01500555*(aktualniHodnota-248.404809)
mocnenec = 0.042958904*(-195.5623156) 
exponent=exponent-0; // jistota je jistota
mocnenec=mocnenec-0; // jistota je jistota
alert (mocnenec) // obsahuje -8.401142741878102
alert (exponent) // obsahuje -3.7124452316899496

alert ( Math.pow(mocnenec, exponent) );  //  Hodnota je  NaN !!!


Nevíte někdo kde je zakopaný pes a jak to opravit ? ]:(

Aha !!! Toto funguje. Tak to je asi nekde problem v zaporném argumentu:
aktualniHodnota = 1;
exponent = 0.01500555*(aktualniHodnota-248.404809)
mocnenec = 0.042958904*(-195.5623156) 
exponent=exponent-0; // jistota je jistota
mocnenec=mocnenec-0; // jistota je jistota
alert (mocnenec) // obsahuje -8.401142741878102
alert (exponent) // obsahuje -3.7124452316899496

alert ( Math.pow(-mocnenec, -exponent) );  //  Hodnota není  NaN, ale číslo !!!
Předmět Autor Datum
Nejen Javascript. I windowsovska kalkulacka nebo Open Office Calc. Zrejme to pocitaj zpusobem, ktere…
Wikan 28.05.2006 00:08
Wikan
:-? Héj lidi ! Tohle mi nespočítá ani Windowsácká kalkulačka: Schválně zkuste: -8.4 ^ -3.7 --> Nepl…
Flash_Gordon 28.05.2006 00:16
Flash_Gordon
Naco potrebujes taketo mocniny? Je to divne ale mozno aj spravne. Skusil som aj -8.4 ^ -3.7 = -(1/8.…
MM.. 28.05.2006 02:22
MM..
hehe.. já si pamatuju, že snad ještě do verze ve Win95 počítala Billova kalkulačka: 3,11 - 3,1 = 0 :…
touchwood 28.05.2006 08:46
touchwood
A vieš, že vlastne nemáš pravdu? (-0.119)^(37 * 1/10) To vlastne znamená: (-0.119)^37^1/10, čiže a…
msx. 29.05.2006 09:19
msx.
No hej, tak to zhrniem, ze pocitat takuto mocninu zo zaporneho cisla je nezmysel a kalkulacka rata s… poslední
MM.. 29.05.2006 13:18
MM..
Můžete mi teda hlepnout s tímto ? [vypocty.PNG] Předpokládejme že buňku B73 měním v proměnné aktual…
Flash_Gordon 28.05.2006 11:47
Flash_Gordon
Funkce EXP znamena e^neco. Ty vzorce v excelu a javascriptu jsou naprosto odlisny.
Wikan 28.05.2006 15:40
Wikan
Jo. Už jsem si to dohledal jinde. ok.
Flash_Gordon 28.05.2006 19:19
Flash_Gordon

Naco potrebujes taketo mocniny?
Je to divne ale mozno aj spravne. Skusil som aj
-8.4 ^ -3.7 = -(1/8.4) ^ 3.7
tam je potom kladny mocnitel (t.j. je to ca. -0.119 ^ 3.7) a na to hadze win kalkulacka tiez invalid input. Mala by to ratat nekonecnym radom, takze nemal by vznikat problem pocas vypoctu, ale viem si predstavit ze toto mocnenie na "3.7" vytvara v skutocnosti nieco ako parnu odmocninu zo zaporneho cisla, co nie je samozrejme v realnych cislach definovane, proste ta fcia (x^3.7) nie je v tom intervale v realnych cislach definovana.
Mal by si si najprv ujasnit co chces ratat, a ci to ma naozaj riesenie, umocnovanie na 3.7 nie je pri opise reality moc potrebna operacia...

dodatok: teraz ma napadlo ze je to vlastne (-0.119)^(37 * 1/10), t.j. 10-ta odmocnina z -0.119^37, a kedze -0.119^37 je zaporne cislo tak z neho nemoze existovat 10-ta odmocnina, ale zaujimave je ze kalkulacka nevie ani 10-tu odmocninu z -0.119^38, co by teda mala vediet :-D No co, mrkvosoft :-D:-D

A vieš, že vlastne nemáš pravdu?

(-0.119)^(37 * 1/10)

To vlastne znamená:
(-0.119)^37^1/10, čiže ako hovoríš 10 odmocnina z ((-0.119)^37), lenže aj naopak:
(10 odmocnina z (-0.119))^37. Teraz si to premietneme na 38:
(-0.119)^38^1/10, čiže ako hovoríš 10 odmocnina z ((-0.119)^38), lenže aj naopak:
(10 odmocnina z (-0.119))^38. A tu je problém, pretože ono si to zrejme počíta takto:
(-0.119)^(38 * 1/10) a to sa proste nedarí vypočítať obidvoma spôsobmi viď vyššie.

Můžete mi teda hlepnout s tímto ?
[vypocty.PNG]

Předpokládejme že buňku B73 měním v proměnné aktualniHodnota.
Samozřejmě jen v intervalu kladných čísel.

Je pak správně zapsán tento vzorec ? Excel to žere. Že bych tam nakonec dal jiný vzorec ?
Co jsem se přehlédl ?

aktualniHodnota = 1;   // Stejně tak to , ale může být něco jiného, kladného.
exponent = 0.01500555*(aktualniHodnota-248.404809)
mocnenec = 0.042958904*(-195.5623156) 
/*
Asi ten výpočet jsem špatně pochopil. Přece jen nejsem excelový přeborník.
*/
alert ( Math.pow(mocnenec, exponent) );  //  Hodnota je  NaN !!!

Stačí když mi napovíte v nějakém stravitelném tvaru rovnici:
=$G$62*($G$63+EXP($G$64*(B73+$G$65)))
To jediné mi stačí.

předem dík.

Zpět do poradny Odpovědět na původní otázku Nahoru