2013-11-11 4 views
0

Я использую математическую библиотеку в сочетании с JexlEngine для вычисления различных уравнений. В этих уравнениях у меня также есть функция pow. Проблема в том, что когда у меня есть огромные числа, такие как math.pow(99999, 10000), jexl пытается оценить его, и это требует много времени и использования ЦП. Оценка не должна выполняться, если решение превышает максимальное значение Long. Есть ли способ узнать, прежде чем оценивать мощность, если она больше, чем макс Лонг?Вывести, если экспонента выше длинного порога перед вычислением

+0

Вы можете приблизиться к этому, но в целом нет возможности узнать ответ, не создавая проблему. –

+0

Вы можете попробовать с логарифмами – SJuan76

+0

Как это сделать? – wasp256

ответ

3

Вы можете сравнить показатель для

double base = 99999; 
double maxExp = Math.log(Long.MAX_VALUE)/Math.log(base); 

если власть над maxExp, вы получите переполнение.

0

Вы можете попробовать

static final BigInteger BigLongMax = BigInteger.valueOf(Long.MAX_VALUE); 
... 
BigInteger.valueOf(99999).pow(10000).compareTo(BigLongMax);