我想在 Windows 软件的 gcc/Linux 移植版本中实现完全相同的浮点结果。出于这个原因,我希望所有双精度操作都是 64 位精度的。这可以使用例如 -mpc64 或 -msse2 或 -fstore-floats 来完成(所有这些都有副作用)。然而,我无法解决的一件事是超越函数,如 sin/asin 等。文档说他们在内部期望(并且我想使用)长双精度,并且无论我做什么,它们产生的结果都与 Windows 对应物不同。
这些函数如何使用 64 位浮点精度计算结果?
更新:我错了,是 printf("%.17f") 错误地舍入了正确的双精度结果,gdb 中的 "print x" 表明数字本身是正确的。我想我需要对此提出一个不同的问题......也许关于如何使 printf 不在内部将 double 视为扩展。也许使用 stringstream 会产生预期的结果......是的。