一般编程:十进制数,浮点数

mk1*_*k12 2 floating-point decimal-point

我可能完全错了,我对此一无所知,但我对编程语言中的十进制数字数据有疑问.我知道浮点数并不完全精确,因为它们以二进制形式存储有权或其他东西,但我总是想知道为什么十进制数数据类型不只是存储一个数字就像没有小数一样,所以做计算就像如果没有小数,则在之后添加.就像在这种情况下:

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

6 decimals in total... 7571613 -> 7.571613
                        ^^^^^^
                        654321
Run Code Online (Sandbox Code Playgroud)

所以2.159*3.507 = 7.571613

为什么它不能像那样工作?

Ima*_*ist 9

这正是他们所做的.浮点数以指数形式存储.我们假设我们正在使用基于十进制的计算机,因此我不必将所有这些数字更改为二进制.

你正在成倍增加2.159 * 3.507,但实际上它2.159被存储为2159 * 10^-33.507存储为3507 * 10^-3.由于我们正在研究一个基于十进制的系统,10所以我们只需要存储-3没有10,就像这样:2159,-3或者3507,-3.这-3是"浮点"的位置:当点向左移动时,浮点减小(.3507存储为3507,-4),随着点向右移动,浮点增加(35.07存储为3507,-2).

将两者相乘时,十进制数(或二进制计算机上的二进制数)是唯一成倍增加的数字. 浮点数被添加了! 所以在幕后发生的事情是:

2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6
Run Code Online (Sandbox Code Playgroud)

7571613,-6只是7571613 * 10^-6(记住我们可以假设,10因为我们正在使用十进制计算机),这是相同的7.571613.

当然,浮点不一定是-3,它可以是适合存储的任何东西:

21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613
Run Code Online (Sandbox Code Playgroud)

当然,大多数计算机不会以十进制形式存储内容,因此实际数字将全部为二进制,而浮点数将是类似的2^-9 -> -9而不是10^-3 -> -3.但是你明白了.