我正在尝试移植 _controlfp( _CW_DEFAULT, 0xffffffff ); 从 WIN32 到 Mac OS X / Intel。我完全不知道如何移植这个指令......你呢?谢谢!
2 回答
试试Gough 的Introduction to GCC的第 8.6 节,它演示了 x86 FLDCW 指令。但是如果你告诉我们你为什么需要它,它会有所帮助——如果你希望你的双精度是 IEEE-754 64 位双精度,最简单的方法是使用 -msse -mfpmath=sse 进行编译。
您控制哪些精密元件?
根据微软的网站:
该
_control87
函数获取和设置浮点控制字。浮点控制字允许程序更改浮点数学包中的精度、舍入和无穷大模式。您还可以使用 屏蔽或取消屏蔽浮点异常_control87
。如果掩码的值等于 0,_control87
则获取浮点控制字。如果 mask 不为零,则为控制字设置一个新值:对于 mask 中为 on(等于 1)的任何位,new 中的相应位用于更新控制字。换句话说,fpcntrl = ((fpcntrl & ~mask) | (new & mask))
其中 fpcntrl 是浮点控制字。
请注意关键字“库”。此函数正在操作Microsoft库,该库在 Mac 上可能不存在。
我建议如下:
- 自己控制Mac上的浮点芯片
- 或者使用适用于 Mac 的 Microsoft 编译器
- 或者找到一种方法将浮点控件移动到程序中更通用的位置。
我能给出的最好建议是尽量减少与标准和平台或库特定问题保持一致的代码。对于那些涉及平台特定功能的功能,将它们移动到自己的源文件/翻译单元中。创建这些函数的副本,每个平台一个。让链接器决定使用哪些。
祝你好运。