Я пытаюсь выполнить следующий расчет в Javascript:
e^x / (1 + e^x)
где x
— длинное число с плавающей запятой.
В этом случае мне требуется точность не менее 10-го знака после запятой.
Я использовал BigDecimal для точной обработки чисел с плавающей запятой, т.к. предлагается в Руководстве по операциям с плавающей запятой.
Моя первая попытка:
var foo = new BigDecimal(myVeryLongFloatingPoint)
var bar = Math.exp(foo);
var spam = bar.divide(bar.add(new BigDecimal("1")));
привело к ошибке (где xxxxx — число с плавающей запятой):
TypeError: Object xxxxx has no method 'add'
Поэтому я попытался преобразовать bar
в объект BigDecimal:
var foo = new BigDecimal(myVeryLongFloatingPoint)
var bar = new BigDecimal(Math.exp(foo));
var spam = bar.divide(bar.add(new BigDecimal("1")));
что, в свою очередь, приводит к ошибке (где xxxxx - число с плавающей запятой):
BigDecimal(): Not a number: xxxxx
Где я ошибаюсь?
Является ли это разумным подходом к обработке такого рода вычислений с плавающей запятой, когда требуется высокая степень точности?
1 / (1 + e^-x)
и использовать его для положительногоx
? - person Mark Dickinson   schedule 20.09.2011