【发布时间】:2019-07-12 12:39:54
【问题描述】:
我是 C++ 的初学者,在研究 double 和 float 之间的区别时,我遇到了https://www.thoughtco.com/definition-of-double-958065
现在,根据这个网站,“double 类型可以表示小数也可以表示整数。它总共可以包含多达 15 位数字,包括小数点前后的数字。”
所以如果我想存储一个值,比如 33.53287,我应该能够做到这一点。但是当我这样做并打印我的变量时,它会给我输出 33.5329 。 为什么会这样? 根据上述行,只要我们包含少于 15 位的数字,就可以了。但是为什么会出现这样的结果呢?
另外,我读到 double 比 float 更精确。但是如果我在代码中用 float 替换 double ,我会得到相同的结果。那我怎么能说double比float更精确呢?
不仅如此,如果我将我的号码替换为更大的 14 位数字(包括小数点前后的数字),我会得到 3.88889e+008 的答案 但是,如果我用 int 替换 double,我得到 388888883。 显然,使用 int 作为数据类型得到的结果比使用 double 作为数据类型得到的结果更精确。同样,这是违反直觉的,因为 int 占用 4 个字节,而 double 8。
我看过很多关于数据类型 double 的文本,但没有一个能解决我的困惑。
-Understanding the datatype Double
- What is the difference between float and double?
- https://www.geeksforgeeks.org/difference-float-double-c-cpp/
-
C++ different output in double and float
#include <iostream> using namespace std; int main () { double x=33.53287; cout << x ; return 0; } #include <iostream> using namespace std; int main () { double x=388888883.53287; cout << x ; return 0; }
所以基本上问题是
为什么 double 不给出 33.53287 作为输出,而是给出 33.5329 尽管非常精确。
即使 float 给出相同的输出,为什么它的精度不如 double?
为什么不在第二个代码中双重打印整个数字 - 为什么是 int more 在这种情况下比两倍更精确。
【问题讨论】:
-
您检查值的方式有缺陷。 std::setprecision 不同的是数据类型,但是你用同样的方法打印出来,6位精度。
-
请注意,仍有一些数字不超过这 15 位数字,但仍无法以双精度形式表示 - 甚至像 0.2 这样简单的数字,它在二进制表示中是周期性的......
标签: c++