我可能完全错了,我真的不知道呢,但是我有一个问题是关于小数位数的数据类型的编程语言。我的理解是,浮标并不是完全精确的,因为他们是存在的二进制与权力或什么的,但是我一直想知道为什么小数的数据类型不仅存储数为如果没有小数,因此计算,如果没有一位小数,然后将其添加在之后。喜欢在这样的情况:

2.159 * 3.507 --> 2159 * 3507 = 7571613
  ^^^     ^^^
  123     456

6 decimals in total... 7571613 -> 7.571613
                        ^^^^^^
                        654321

所以2.159*3.507=7.571613

为什么不能只是工作那样吗

有帮助吗?

解决方案

这正是他们做什么。甲浮点数存储在指数形式。让我们假设我们基于十进制的计算机上工作,所以我不必所有这些数字更改为二进制。

您正在乘以2.159 * 3.507,但实际上2.159存储为2159 * 10^-33.507存储为3507 * 10^-3。因为我们基于十进制系统的工作,假定10,所以我们才真正有存储-3没有10,像这样:2159,-33507,-3。该-3是“浮点”的位置:作为点向左移动浮点降低(.3507存储为3507,-4)和作为点向右移动浮点增加(35.07存储为3507,-2

当你乘两个一起,十进制数(或二进制的计算机上的二进制数)是获取相乘的唯一事情。 浮点被添加的所以在幕后发生的事情是:

2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6

7571613,-6只是7571613 * 10^-6(记住,我们可以假设,因为我们是一个小数电脑上工作10),这是一样的7.571613

当然,浮点不必被-3,它可以是任何适合的存储:

21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613

当然,大多数计算机没有储存东西小数,所以实际数字将是所有二进制和浮点会像2^-9 -> -9而非10^-3 -> -3。但你的想法。

其他提示

这就是所谓的“定点运算”人们做这一切的时候

请参阅 http://gameprogrammer.com/4-fixed.html

有相当多的实现的固定点运算。然而,我们经常跑出来的小数位非常,非常快速地带固定点的储存。它适用于货币交易,在那里我们知道,我们不是去商店/护理有关的任何不合理的数字。

此外,对于很多其他事项外,定点运算只是不值得的开销。浮点只是快很多。

事情如下:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top