微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果我们将格式更改为双重IEEE 754-1985的格式,是否可以消除数字的浮点错误?

如何解决如果我们将格式更改为双重IEEE 754-1985的格式,是否可以消除数字的浮点错误?

当前是IIRC,当前显示浮点数的方法是将它们显示1/2 + 1/4 + 1/8 ...。但是,如果我们将方法更改为浮点数,从而使任何浮点数实际上都是普通的整数,并填充一系列0,该怎么办?每个数字都必须更大,类似于62位的double。

对于62位双精度数,我们为指数保留11位,而为实际数保留53位。现在,我们可以做的是用一个数字表示补齐的“零”的数量。在此示例中,我们可以将11位作为填充位,这意味着对于53位数字,我们的精度为(2 ^ 11) - 1位数字。

假设我要显示0.4,目前在Python中,我们知道0.4存在浮点问题,

>>> import decimal
>>> decimal.Decimal(0.4)
Decimal('0.40000000000000002220446049250313080847263336181640625')

但是用我的编码,这不会发生,为什么?因为我可以用传统的二进制数4来表示数字100,并将超过零的数量表示为二进制数101。这意味着我可以用数字表示0.4,而不会出现浮点问题,

0 00000000001 00000000000000000000000000000000000000000000000000100

第一位保留用于符号,下一个11保留零填充,53保留数字。它需要更多位,但是我现在可以准确地表示一个长度达2 ^ 11位的数字。不仅如此,维基百科页面还建议C ++双精度数字仅16位,这意味着我的数字精度更2048 - 16位!

解决方法

奇怪的是,您特别提到IEEE 754-1985,因为IEEE 754-2008已经引入了十进制算术。与两倍相比,您建议的方案范围要小得多,因此不适合进行科学计算。实际上,十进制计算经常被保留用于财务计算,因为即使在休闲生活中,我们也很少处理绝对精度。我们可以在田地里放三头母牛,但是它们的体重呢?他们的价格似乎绝对准确,但是在您计算了所欠的营业税之后?

IEEE 754-2008引入了decimal64,其中最大有效数字为静止16。即使在科学领域(不适合使用十进制算法),NASA的行星际 flight的pi依赖于3.141592653589793,在小数点后15位切入。哦,但您要进行财务计算? .NET使用128位十进制表示28-29位精度,因此,世界各地的金融机构都乐于采用.NET十进制,而不必担心其他花哨的方案。 decimal128存在,并且精度为34位数字。

此外,您的方案不可能具有2048-16位数字的精度。您只为数字分配了53位,而.NET十进制分配了96 bits,并且您的方案非常相似

十进制值的二进制表示形式由一个1位符号,一个96位整数和一个比例因子组成,该比例因子用于对96位整数进行除法并指定其哪一部分为小数。比例因子隐式为数字10,升至0到28之间的指数。

准确度一直在十进制64的16位数字(使用50位)和.NET十进制的28位之间的低端。实际上,普通用户每天不会进行数十亿美元的财务计算,因此消费者的CPU不必费心采用IEEE 754-2008,并且因为只有要求他们购买IBM Power CPU的用户才可以使用它们,所以不要希望本机硬件和集成的(如标准的,不是额外的库)语言支持很快就会出现

,

确实存在任意精度的软件库。使用它们的缺点是速度。即使那样,您也永远无法表示具有无限数量的重复数字的数字。

您还可以使用整数类型定义自己的定点编码。如前所述,您将在精度与范围之间进行权衡。

在Python中,我们知道0.4存在浮点问题

我不知道Python或任何其他语言在0.4方面存在问题。一切都定义得很好并且具有确定性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。