我正在尝试用 Javascript 执行以下计算:
e^x / (1 + e^x)
其中 x
是一个长 float 。
在这种情况下,我要求至少精确到小数点后 10 位。
我一直在使用 BigDecimal准确处理 float ,如 The Floating Point Guide 中的建议.
我的第一次尝试:
var foo = new BigDecimal(myVeryLongFloatingPoint)
var bar = Math.exp(foo);
var spam = bar.divide(bar.add(new BigDecimal("1")));
导致错误(其中xxxxx是 float ):
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 是 float ):
BigDecimal(): Not a number: xxxxx
我哪里错了?
这是处理这种需要高精度的浮点计算的明智方法吗?
最佳答案
您应该将字符串传递给 BigDecimal
:
var bar = new BigDecimal(Math.exp(foo).toString());
关于javascript - 在 Javascript 中将 Math.exp() 与 BigDecimal 一起用于大型 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487844/