在x64平台上的GCC中,默认情况下为扩展精度
Is extended precision on by default in GCC on x64 platform?
当我使用GCC并使用double
值进行计算时会发生什么。
GCC在(x64平台,我在这里假设)上使用https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/i386-and-x86-64-Options.html#i386-和-x86-64选项
-mfpmath=sse (default) (use sse instructions)
-mpc80 (default) (rounding mode to 80bit extended precision)
当我在一个简单的C++程序中使用64位double
值时,我感到很困惑。现在的计算是以扩展精度执行的(因为mpc80默认打开)还是使用sse指令(没有扩展精度的东西)
到底发生了什么?在64位平台上,我需要做些什么,以确保在代码的某些部分中只使用"双精度",所以假设GCC默认进行80位扩展精度计算,那么我需要手动将FPU单元设置为这部分代码中的"双精确度"?
否。在64位模式下,使用SSE指令。-mpc80
(以及其他类似选项)仅针对32位系统。(AFAIK)
如果您想确定,请进行运行时精度检查。
一般来说,您不应该依赖任何精度,尽管您通常可以假设double
实际上是双精度。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 是默认情况下分配给char数组常量的值
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- CMake:默认情况下,如何使add_custom_command输出保持最新?
- 在没有默认构造函数的情况下创建的派生对象
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 如何防止类中的类对象尝试在没有默认构造函数的情况下自动构造自身?
- Vulkan默认情况下已经有多线程了吗
- 默认情况下,"std::shared_ptr"不应该使用"std::d efault_delete"吗?
- 为什么C++默认情况下不移动构造右值引用?
- 默认情况下初始化时 POD 是否给予特殊处理 (C++14)?
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?
- 默认情况下,C++ 开关运行时循环
- 谷歌嘲笑!我的测试出错.默认情况下,呼叫将返回调用
- 如何将用户下载的标头文件添加到系统中默认情况下的标题文件列表
- 默认情况下C++数组作为参数引用
- 为什么默认情况下初始化局部变量
- 默认情况下,我如何在不使用继承的情况下使用所有构造函数
- 为什么我能够在没有默认构造函数的情况下默认构造对象