2013-04-12 3 views
0

Как рассчитать 98 при увеличении exp (13-5) используя JavaScript?Как повысить до степени экспоненты?

Это так?

Math.pow(98,Math.exp(8)) 
+0

вы пробовали это? Когда я запускаю его [здесь, на jsFiddle] (http://jsfiddle.net/bTuhE/), он возвращает «_Infinity_». – jahroy

+0

Если вы пытаетесь поднять 98 до экспоненты константы Эйлера до восьмого, тогда да. Но, вероятно, это даст вам «Бесконечность» в большинстве сред JS. ;) – ryanbrill

+4

Yep ... Теперь, когда я вижу, что такое _Math.exp_, вы пытаетесь поднять 98 до «почти 3000-й мощности» .... так что вы говорите о количестве, которое довольно огромно. Итак ... Вы правильно выполняете математику, но система номеров JavaScript не может представить результат как число. Проверьте [этот ответ] (http://stackoverflow.com/a/307200/778118) для получения информации о наибольшем количестве, которое может представлять JavaScript. – jahroy

ответ

0

Когда мне нужно обрабатывать большие положительные числа, переполнится стандартных типов с плавающей точкой, то я хранить числа как логарифм числа вместо этого. Поэтому вместо вычисления 98 на степень exp (8), я бы вычислил exp (8) * log (98) и работал с этим. Я еще не сталкивался с ситуацией, когда даже этот метод был недостаточным для хранения нужных мне чисел. Тем не менее, я столкнулся с несколькими ситуациями, когда правильный ответ предполагает умножение очень больших чисел на очень маленькие числа, и в этой ситуации использование журналов, как я описал, позволило избежать переполнений/недочетов, что привело бы к неправильному ответу.

Обновление: Я подозреваю, что это какой-то вопрос о домашнем задании, связанный с тем, как преодолеть проблему, что 98^exp (8) слишком велика для стандартных типов с плавающей точкой. В этом случае, я думаю, мое предложение использовать журналы пригодится. Например, чтобы напечатать число в C# вы можете сделать следующее:

double x = Math.Exp(13 - 5) * Math.Log(98); // the number required is exp(x) 
int exponent = (int)Math.Floor(x/Math.Log(10)); 
double absissae = Math.Exp(x - exponent * Math.Log(10)); 
System.Diagnostics.Trace.WriteLine(absissae.ToString() + " E " + exponent.ToString()); 

, которая производит вывод

5.77130918514205 E 5935