GNU C++ 浮点数精度
gnu c++ floating number precision
我对浮点数有一个简单的问题,
double temp;
std::cout.precision(std::numeric_limits<double>::digits10);
temp = 12345678901234567890.1234567890;
std::cout << (temp < std::numeric_limits<double>::max()) << std::endl;
std::cout << std::fixed << std::endl;
std::cout << temp << std::endl;
但是,我得到的输出是这样的,
1
12345678901234567168.000000000000000
temp 的值仍在双倍的范围内,但是,值完全不同。我想知道我在这里做错了什么?
谢谢。
双精度只有 15.95 个十进制数字的精度。您已经超过了值的整数部分的位数,因此最后几位数字的精度会丢失,并且小数点后缺少任何有用的数字。
您可能应该看一下以下内容:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html 在对浮点值进行更多工作之前。
这并不完全不同。正确到 16 位左右。这就是您可以从double
中得到的期望。
双精度只能存储有限的精度。它计算到大约 15 个十进制数字。
以下是一篇关于浮点数如何表示以及该表示的含义的有用文章: 浮点数
IEEE
754对于任何给定值都不精确 - 例如 http://www.cprogramming.com/tutorial/floating_point/understanding_floating_point.html 和 http://support.microsoft.com/kb/42980
-358974.27 无法在float
上表示 http://ridiculousfish.com/blog/posts/float.html 我记得(尽管我懒得测试它(即使是像 2.2 或 2.3 这样"简单"的东西也无法准确表示为double
。
相关文章:
- 使用浮点数和双精度数的非常小数字的数学
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 位设置为浮点数或双精度值 c++
- 为什么浮点数的矢量化比双精度更有效?
- 在C++中序列化浮点数/双精度,编译为 WebAssembly
- 为什么编译器接受具有长双精度文本的浮点数的初始化?
- C++ 警告:在一个声明中将截断从双精度初始化为浮点数,但在另一个声明中则不初始化
- 在 OpenCL 内核中实现半精度浮点数据类型
- 如何随机化双精度/浮点数据类型? C++
- 提升多精度浮点数128:标准::exp错误:'no matching function for call'
- 如何提高计算浮点数的精度?
- atof() 返回浮点数而不是双精度
- 如何以最大精度(C++)将uint64_t转换为0到1之间的双精度/浮点数?
- 单个精度浮点数上的第 24 个分数位在哪里?IEEE 754
- 在C++中实现半精度浮点数
- C++双精度/浮点数的内部表示
- 清除单个精度浮点数的位
- 将双精度浮点数舍入到最接近且更大的浮点数
- 如何判断双精度浮点数是否可以安全地存储为单精度浮点数
- 用于高精度浮点数的c++类型