我可能完全错了,我对此一无所知,但我对编程语言中的十进制数数据类型有疑问。我知道 float 并不完全精确,因为它们是以二进制形式存储的,带有幂或其他东西,但我一直想知道为什么十进制数字数据类型不只是存储一个数字,就好像没有小数一样,计算也是如此如果没有小数,则在后面加上。就像在这种情况下:
2.159 * 3.507 --> 2159 * 3507 = 7571613
^^^ ^^^
123 456
6 decimals in total... 7571613 -> 7.571613
^^^^^^
654321
所以 2.159 * 3.507 = 7.571613
为什么它不能像那样工作?
最佳答案
这正是他们所做的。 float 以指数形式存储。假设我们正在使用基于十进制的计算机,因此我不必将所有这些数字都更改为二进制。
您乘以 2.159 * 3.507
,但实际上 2.159
存储为 2159 * 10^-3
和 3.507
存储为 3507 * 10^-3
。由于我们在基于十进制的系统上工作,因此假定 10
,因此我们实际上只需要存储 -3
而无需 10
,像这样:2159,-3
或 3507,-3
。 -3
是“ float ”的位置:随着点向左移动, float 减少(.3507
存储为 3507,-4
),随着点向右移动, float 增加(35.07
存储为 3507,-2
)。
当您将两者相乘时,十进制数(或二进制计算机上的二进制数)是唯一相乘的。 添加了 float !所以在幕后发生的是:
2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6
7571613,-6
只是 7571613 * 10^-6
(记住我们可以假设 10
因为我们正在研究十进制计算机)与 7.571613
相同。
当然, float 不一定是-3
,它可以是适合存储的任何值:
21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613
当然,大多数计算机不会以十进制形式存储内容,因此实际数字都是二进制形式, float 类似于 2^-9 -> -9
而不是 10^-3 -> -3
。但你明白了。
关于floating-point - 一般编程 : Decimal numbers, float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285908/