我尝试计算math.exp(9500)但遇到了OverflowError: math range error(大约是 6.3e4125)。从这个问题来看,似乎是由于浮点数太大,接受的答案是“(...) 稍微超出了双精度数的范围,因此会导致溢出”。
我知道Python可以处理任意大的整数(long类型),有没有办法以同样的方式处理任意大的浮点数?
编辑:我最初的问题是关于使用整数来计算 exp(n) 但正如 Eric Duminil 所说,最简单的方法是3**n不提供任何有用的结果。我知道意识到这个问题可能与这个问题类似。
我想要比较不同的方法来获得float/double的绝对值,以找出哪一个是最快的,因为我必须将它应用于大型数组.通过使用强制转换和位掩码,在此过程中会丢失小数.(我必须只使用C)
这是我的代码:
uint64_t mask = 0x7fffffffffffffff;
double d1 = -012301923.15126;
double d2 = (double)(((uint64_t)d1) & mask);
Run Code Online (Sandbox Code Playgroud)
输出是:
d1 = -012301923.15126;
d2 = 012301923.00000;
Run Code Online (Sandbox Code Playgroud)
因此在转换过程中会丢失小数,有没有快速的方法让它们恢复?
提前致谢.
编辑:我知道fabs(),我只是想尝试比较不同的"手工"解决方案.