c++ - 检测浮点软件仿真

标签 c++ c floating-point

我正在开发一个运行时速度比精度更重要的应用程序。数字运算涉及浮点运算,我担心 double 和/或 long double 在软件中处理而不是在处理器上本地处理(这在处理器上总是正确的) 32 位拱门对吗?)。我想有条件地使用硬件支持的最高精度进行编译,但我还没有找到一种快速简便的方法来检测软件仿真。我在 GNU/Linux 上使用 g++,我不关心可移植性。它在 x86 arch 上运行,所以我假设 float 始终是 native 的。

最佳答案

现代 x86 上的浮点单元 (FPU) 本身是 double 的(事实上,它甚至比 double 更大),而不是 float (32 位中的“32”描述的是整数寄存器宽度,而不是 float 宽度)。但是,如果您的代码正在利用矢量化 SSE 指令(并行执行 4 个单运算或 2 个双运算),则情况并非如此。

如果不是,那么通过将您的应用程序从 float 切换到 double 来实现的主要速度将体现在增加的内存带宽中。

关于c++ - 检测浮点软件仿真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914484/

相关文章:

java - 在保持精度和准确度的同时划分两个大长整型

c++ - 在 Windows 中调试 QT 5.8 和打开 QFileDialog 时,gdborig.exe 随机崩溃

c - 管理 Code::Blocks 中的默认头文件目录

c - 从 C 中的输入文件中识别字符

c - C 中的移位、类型和符号扩展

c++ - 为什么pow(x,1/p)和pow(x,1.0/p)不相等,即使打印它们的值会得到相同的结果

C++ 将带有十六进制字符的 .txt 转换为带有\x 的十六进制字符的 .text

c++ - 在具有相同种子的不同操作系统上实现相同的随机数序列

c++ - 对 std::vector 元素的赋值导致内存损坏

floating-point - FSIN 和其他 x87 三角函数指令在 AMD 处理器上的准确性