打印出一个非常小的浮点数

dae*_*119 -1 c++ floating-point floating-accuracy

我有以下代码:

float test = 1/(10^(15));
std::cout << "test: " << test << std::endl;
Run Code Online (Sandbox Code Playgroud)

但我得到"test:0"作为值.我想要"测试:0.000000000000001".

我该如何实现这一目标?

Sam*_*hik 8

这里有很多问题.

10 ^ 15
Run Code Online (Sandbox Code Playgroud)

看起来你期望"^"成为指数运算符,即10提升到15次幂.

它不是.在C和C++中,"^"是按位异或运算符.

第二个问题是表达式中的所有值都是整数值.这意味着(1/(10^15))计算如下:

1)10 ^ 15 = 5,记住这^实际上是一个按位异或运算符.

2)1/5 = 0,因为这些是整数值,这是整数除法,这就是你得到0值的原因.

解决这个问题的最佳方法是使用科学记数法:

float test = 1/(1e15);
std::cout << "test: " << test << std::endl;
Run Code Online (Sandbox Code Playgroud)

科学记数法同时有两个目的:一个是你得到正确的值,两个是自动浮点值,所以除法是作为一个浮点除法进行的.

  • 使用[pow()库函数](http://manpages.courier-mta.org/htmlman3/pow.3.html). (4认同)
  • `1e-15`可能比'1/1e15`更好.... (2认同)
  • @ daemoner119为什么不先读一本C++书? (2认同)