【发布时间】:2011-11-21 05:13:32
【问题描述】:
我正在尝试在 Javascript 中执行以下计算:
e^x / (1 + e^x)
其中x 是一个长浮点数。
在这种情况下,我要求至少精确到小数点后 10 位。
我一直在使用BigDecimal 来准确处理浮点数,正如The Floating Point Guide 所建议的那样。
我的第一次尝试:
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? -
谢谢,我会玩这个的。
标签: javascript math bigdecimal