floating-point - 一般编程 : Decimal numbers, float

标签 floating-point decimal-point

我可能完全错了,我对此一无所知,但我对编程语言中的十进制数数据类型有疑问。我知道 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^-33.507 存储为 3507 * 10^-3。由于我们在基于十进制的系统上工作,因此假定 10,因此我们实际上只需要存储 -3 而无需 10 ,像这样:2159,-33507,-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/

相关文章:

vba - 从 VBA 中的 IEEE-754 double 中提取尾数、指数和符号数据

c - 当 float 大于其精度时,它被称为什么?

javascript - 为什么 Node.js 自动舍入我的 float ?

ruby-on-rails - Rails 3 GPS 坐标的 float 或十进制数

.net - 使用多个小数点分隔符进行解析

delphi - 从 Variant String 转换为 Double 忽略小数点

asp.net - 在asp.net中限制 double 小数点后六位

c - double 奇怪的行为。需要一个解释

javascript - 可以将数字存储为 float 吗?

MySQL 小数列 SUM