平台独立的数学库

时间:2009-07-15 02:02:17

标签: c++ math cross-platform mpfr

是否有公开可用的库可以生成确切的库 sin,cos,floor,ceil,exp和log 32的相同结果和 64位linux,solaris和其他可能的平台?

我正在考虑以下备选方案:
a)编译cephes 使用gcc -mfpmath=sse并在每个上使用相同的优化级别 平台......但不清楚这是否有效。
b)MPFR但我担心会这样 太慢了。

关于精度(已编辑):对于此特定应用程序 我真的不需要产生价值的东西 在数值上最接近确切的值。我只需要答案 在所有平台上都是完全相同的,os和“bitness”。那 据说价值需要合理(5位数 可能就够了)。我为没有说清楚而道歉 在我最初的问题。

我认为具有足够低精度设置的MAPM或MPFR可能会这样做 诀窍,但我希望找到一些没有的东西 它的“多精度”机械/味道。无论如何,我会的 试试这个。

5 个答案:

答案 0 :(得分:4)

类似于:http://lipforge.ens-lyon.fr/www/crlibm/index.html是你要搜索的内容(这是一个库,其目的是能够替换C99的标准数学库 - 所以在正常情况下保持足够好的性能 - 根据IEEE 754舍入模式确保正确舍入结果)?

答案 1 :(得分:4)

crlibm是正确的工具。与之相关的早期海报。因为它是正确舍入的,所以如果编译正确,它将在符合IEEE-754标准的硬件的所有平台上提供相同的结果。它比MPFR快得多。

答案 2 :(得分:1)

你不应该需要一个。地板和ceil将是准确的,因为他们的计算是直截了当的。

你所关注的是对罪恶,cos和exp等最后一点进行四舍五入。但这些都是CPU微码的原生,无论库如何,都可以高质量地完成。但是,从芯片架构到架构,舍入确实有所不同。

因此,如果对于transindentals的确切答案确实是您的目标,那么您确实需要一个可移植的库,并且您也将通过这样做来放弃效率。 您可以使用像MAPM这样的便携式库,它不仅可以为您提供一致的ULP结果,还可以为您提供定义精确度的附带好处。

您可以使用tools like this onethis one.

检查数学精确度

答案 3 :(得分:1)

你提到使用SSE。如果你计划只在x86芯片上运行,那么你期望的不一致是什么?

至于MPFR,不要担心 - 测试它!顺便说一句,如果它足够好被包括在GCC中,那对你来说可能已经足够了。

答案 4 :(得分:1)

您想使用MPFR。这个图书馆已存在多年,已被移植到阳光下的每个平台,并由大量人员优化。

如果MPFR不足以满足您的需求,我们将讨论全定制ASM实施,在这种情况下,考虑在专用硬件中实施它可能更有效。