numba 可以使用长双打吗?

问题描述 投票:0回答:1

在 numpy 中,float128 通常是一个 long double(不是 128 位浮点数)。但是我不知道numba是否支持这个。文档似乎没有提到长双打或 numpy 类型 float128。

python numba
1个回答
0
投票

不,Numba 还不支持这种类型。关于这个主题有一个open issue。 80 位扩展精度通常得不到很好的支持,即使在 Numpy 中也是如此。在主流的 x86-64 架构上,这些数字是由 x87 FPU 单元计算的,这个单元现在非常慢而且已经过时了。

如果你想要更高的精度,最好使用像 here 这样的 double-double 数据类型(尽管你当然需要自己将其移植到 Numba 中)。请注意,此数据类型不如 128 位浮点数精确,但它可以受益于 SIMD 单元(即速度很快)。


另一种选择是只使用双精度和数字稳定算法。后来的解决方案通常要好得多。大多数要求更高精度的人通常使用数值不稳定的算法,其中误差呈指数增长(可能是由于灾难性抵消)。使用更高的精度并不能真正解决这个问题:它只是以更慢的计算为代价来推迟问题。实际上,双精度足以让物理学家以相当高的分辨率模拟宇宙。例如,双精度足以精确定位 1 米范围内的原子。使用 3 级分层clustering,可以精确定位银河系中的原子(大小为 87_400 光年)。请注意,集群也有助于设计更快的程序(通常是由于更好的算法、更缓存友好的访问)。

© www.soinside.com 2019 - 2024. All rights reserved.