3

是否有一个公开可用的库可以为 sin、cos、floor、ceil、exp 和登录 32 位和 64 位 linux、solaris 以及可能的其他平台产生完全相同的结果?

我正在考虑以下替代方案:
a)在每个平台上编译的cephesgcc -mfpmath=sse和相同的优化级别......但不清楚这是否可行。
b) MPFR,但我担心这会太慢。

关于精度(已编辑):对于这个特定的应用程序,我真的不需要产生在数值上最接近精确值的值的东西。我只需要在所有平台、操作系统和“位”上的答案都完全相同。话虽如此,这些值需要合理(5 位数可能就足够了)。对于在我最初的问题中没有明确说明这一点,我深表歉意。

我想具有足够低精度设置的 MAPM 或 MPFR 可能会解决问题,但我希望找到一些没有“多精度”机械/风味的东西。无论如何,我会试试这个。

4

5 回答 5

4

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

于 2009-07-15T12:08:13.093 回答
4

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

于 2009-07-22T00:08:04.900 回答
1

您想使用 MPFR。该库已经存在多年,并已被移植到阳光下的每个平台,并由大量人员进行了优化。

如果 MPFR 不足以满足您的需求,我们正在讨论完整的自定义 ASM 实现,在这种情况下,考虑在专用硬件中实现它可能更有效。

于 2009-07-15T03:22:36.090 回答
1

你不应该需要一个。floor 和 ceil 将是精确的,因为它们的计算很简单。

您关心的是对 sin、cos 和 exp 等先验变量的最后一位进行四舍五入。但这些是 CPU 微码的原生代码,无论库如何,都可以始终如一地以高质量完成。但是,舍入确实因芯片架构而异。

因此,如果您的目标确实是对跨缩进的准确答案,那么您确实需要一个可移植的库,并且这样做您也将放弃巨大的效率。您可以使用像MAPM这样的可移植库,它不仅可以为您提供一致的 ULP 结果,而且还可以让您定义任意精度。

您可以使用此工具和此工具检查您的数学精度

于 2009-07-15T02:12:57.890 回答
1

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

至于 MPFR,别担心 - 测试一下!顺便说一句,如果它足以包含在 GCC 中,那么它可能对你来说已经足够好了。

于 2009-07-15T02:15:48.743 回答