0

我正在查看一个C++任务,它读取一个包含十进制数字的文件,并将每个数字作为单个4字节float存储在数据结构中。在更改过程(使用double)之前,我想知道文件中的数字与结构中存储的数字之间的平均误差百分比。将小数存储为单个浮点数时的预期误差是多少?

例如,如果该文件读取19.5和数据结构是19.49999999则错误是

abs(19.49999999/19.5 - 1) = 5.128205128205128e-8 % 

如果分发事项,大部分的文件中的数字是正的和小于1000

+0

你想让我们给你一个数字的估计吗?或者你想让我们告诉你如何编写一个程序来真正衡量它?或者是什么? –

回答

4

32位浮点数有23位尾数,这意味着精确到7-8位十进制数的表示。确切地说,相对误差是2^-24或约6e-8

+0

要理解数学,2^-23是最差的错误,2^-24是平均错误? – ytoledano

+1

不,我相信2^-24是最糟糕的错误。数学上精确的结果是无限的二进制分数。一个“浮点”值包含这个分数的前23位,正确舍入。所以最差的错误是23位的值的一半,即2^-24。但是我必须承认,我很可能会离开。有关基础理论,请参阅[“每位计算机科学家应了解的浮点算术知识”](http://www.validlab.com/goldberg/paper.pdf) –

+0

结果的确应该正确舍入。读取小数输入并将其舍入到正确的二进制小数并不重要,但也不是不合理的。 – MSalters

相关问题