当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
What data is written out when a higher precision is used to display a number than the one supported by the format?
IEEE 754双精度浮点格式的二进制精度为53位,可转换为log10(2^53(~16位有效十进制数字。
如果使用双精度格式将浮点数字存储在存储器中的64位长字中,有效位为52位,隐藏位为1,,但使用更大的精度将数字输出到屏幕,那么实际从存储器读取并写入输出的数据是什么?
当单词的总长度为64位时,机器上的从内存读取操作是否只是简单地读取更多的位,并将其解释为数字有效位的加法?
例如,取数字0.1。无论使用何种精度,它都没有精确的二进制浮点表示,因为它在有效位中有一个无限重复的二进制浮点模式。
如果0.1以双倍精度存储,并以精度>16打印到屏幕上,如C++语言中所示:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double x = 0.1;
cout << setprecision(50) << "x= " << x << endl;
};
输出(在我的机器上执行时(是:
x=0.1000000000000000055511151231257827021181583404541
如果正确的舍入与2个保护位和1个粘性位一起使用,我可以信任错误5.551115123125783e-17中前三个非零二进制浮点数字给出的十进制值吗?
每个二进制分数都恰好等于某个十进制分数。如果像通常情况一样,double
是二进制浮点类型,那么每个double
数字都有一个完全相等的十进制表示。
对于以下内容,我假设您的系统使用IEEE 754 64位二进制浮点来表示double
。这不是标准要求的,但很常见。该格式中最接近0.1
的数字的精确值为0.1000000000000000055511151231257827021181583404541015625
尽管这个数字有很多数字,但它正好等于3602879701896397/255。分子和分母乘以555将其转换为十进制分数,同时增加分子中的位数。
与问题中的结果一致的一种常见方法是使用最接近格式所需位数的四舍五入。这确实将提供关于将字符串转换为double
时的舍入误差的有用信息。
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 使用浮点数和双精度数的非常小数字的数学
- 使用设置精度时如何阻止数字向上舍入?
- 如何将数字输出到文件中,所有数字都具有相同的精度
- 如何在 c++ 中添加两个大的双精度数字
- 字符串和双精度的麻烦,等值后再得到一个数字
- 数字小于机器精度的安全算术?
- 避免双精度数字的四舍五入
- 有没有办法将数字作为字符串,并在不使用浮点数或双精度数的情况下将其四舍五入到确切的位数
- 将协议缓冲区中的二进制双精度数组转换为 JavaScript 数字
- 2 个给定数字之间的双精度密度
- 如何将精度设置为C 的100位数字
- 双精度数字程序意外值
- 非分数数字对双精度数字的影响
- C++ 浮点数与双精度数的精度数字
- 近似e-获得尽可能多的精度数字
- 将双精度数字四舍五入到十分之一位
- 为什么我的 64 位计算机不能在 C++ 中存储双精度数字 2^1024?
- c++中double的精确位数在windows和Linux中不同.为什么?Linux显示超过20个非零精度数字