在c++中浮点表示依赖于编译器
Is floating point representation compiler-dependent in C++?
问题在标题中。我交付给客户的软件似乎有不同的行为,这取决于某些参数是作为整数传递还是作为浮点数传递。我用MinGW为我的客户构建了一个DLL,他将其集成在他的Visual Studio项目中,该项目使用了其他一些编译器(不知道是哪个,我猜是VS的标准编译器)。
会不会是他和我用不同的方式来表示浮点数呢?
谢谢你的提醒,查尔斯。
是的,浮点表示依赖于编译器。
理论上,您可以使用std::numeric_limits
来确定表示的主要方面,例如它是IEEE 754,或者它是二进制还是十进制。
在实践中,除了内存布局,你不能依赖它,因为在主编译器g++中,浮点运算的语义受到优化选项的强烈影响(例如,NaN
是否与自身相等)。
。实际上,它不仅依赖于编译器,还依赖于选项。
令人高兴的是,给定平台的编译器通常会符合该平台的浮点标准内存布局,例如Windows中的IEEE 754(该标准起源于PC平台)。因此,浮点值在c++和Visual c++之间进行交换时,通常应该可以正常工作。一个例外是,g++ long double
映射到80位IEEE 754,而Visual c++它映射到普通的double
,即64位,并且可以想象是什么给你带来麻烦。
相关文章:
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 为什么内存屏障依赖于变量?
- 反转依赖于 end() 的迭代器
- 编译依赖于 QTCore 库的 WASM
- 如何添加依赖于类本身的模板成员变量
- 初始化依赖于子类的继承类的常量类成员
- Makefile 创建两个库 - 一个依赖于另一个
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 类成员函数参数列表是否可以依赖于模板参数?
- 依赖于类成员属性的类实例成员
- 如何定义依赖于参数包转换的函数的返回类型
- 依赖于模板的错误
- 依赖于特定类类型的C++模板方法
- FBString 的小字符串优化是否依赖于未定义的行为?
- CMake:如何在Visual Studio环境中将依赖于模式的编译标志传递给nvcc
- C++ 使函数调用依赖于模板参数
- 如何初始化依赖于先前条目的可变参数模板?
- cmake:构建依赖于非源文件.Qt帮助生成
- 如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
- 在c++中浮点表示依赖于编译器