我目前正在研究一个进行数值计算的C++项目.绝大多数代码使用单精度浮点值,并且完全可以正常工作.因此,我使用编译器标志来使基本浮点文字单精度而不是双精度,这是默认值.我发现这使得表达式更容易阅读,我不必担心在某个地方忘记'f'.但是,我时不时地需要双精度计算提供的额外精度,我的问题是如何将双精度文字输入到这样的表达式中.到目前为止,我尝试的每种方法都首先将值存储在单个精度变量中,并将截断值转换为双精度值.不是我想要的.
我到目前为止尝试过的一些方法如下.
#include <iostream>
int main()
{
std::cout << sizeof(1.0E200) << std::endl;
std::cout << 1.0E200 << std::endl;
std::cout << sizeof(1.0E200L) << std::endl;
std::cout << 1.0E200L << std::endl;
std::cout << sizeof(double(1.0E200)) << std::endl;
std::cout << double(1.0E200) << std::endl;
std::cout << sizeof(static_cast<double>(1.0E200)) << std::endl;
std::cout << static_cast<double>(1.0E200) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
具有单精度常量的运行会产生以下结果.
~/path$ g++ test.cpp -fsingle-precision-constant && ./a.out
test.cpp:6:3: warning: floating constant exceeds range of ‘float’ [-Woverflow]
test.cpp:7:3: warning: floating constant exceeds range of ‘float’ [-Woverflow]
test.cpp:12:3: warning: floating constant exceeds …Run Code Online (Sandbox Code Playgroud)