Floating point 舍入浮动
首先让我给出32位浮点和十进制表示的十六进制和二进制Floating point 舍入浮动,floating-point,numbers,floating-accuracy,Floating Point,Numbers,Floating Accuracy,首先让我给出32位浮点和十进制表示的十六进制和二进制 0x5060000f = 01010000011000000000000000001111 = 15032400896 0x43800005 = 01000011100000000000000000000101 = 256.000152587890625 我的老师说,将1次0x5060000f和24次0x43800005浮点相加,会在最后3位中产生舍入错误 她是什么意思 15032400896 + 24 * 256.000152587890
0x5060000f = 01010000011000000000000000001111 = 15032400896
0x43800005 = 01000011100000000000000000000101 = 256.000152587890625
我的老师说,将1次0x5060000f
和24次0x43800005
浮点相加,会在最后3位中产生舍入错误
她是什么意思
15032400896 + 24 * 256.000152587890625 =
15032407040.003662109375 =
01010000011000000000000000010101 =
0x50600015
首先,让我们看一下编码数字的部分,我将其标记为
a
(15032400896)和b
(256.00015287890625):
问题是当计算a
和24*b
之和时会发生什么,因此首先我们需要找到24*b
。因为24是一个简单的数字,所以我将跳过显示它的完整浮点表示形式,只需将b
乘以24即可。我们只需将其有效位乘以24,即可得出:
24*b = 11000.0000000000000000111 1 • 28
1.11000000000000000001111000000000000000000000 • 233
0.00000000000000000000110000000000000000001000 • 233
当处理器添加数字时,它会有效地移动有效位以对齐表示相同幅度的位。将这些数字对齐会产生:
24*b = 11000.0000000000000000111 1 • 28
1.11000000000000000001111000000000000000000000 • 233
0.00000000000000000000110000000000000000001000 • 233
因此,我们可以看到计算结果在其最后一位是正确的,并且发生的舍入误差的值要低得多。首先,让我们看看编码数字的部分,我将其标记为
a
(15032400896)和b
(256.00052587890625):
问题是当计算a
和24*b
之和时会发生什么,因此首先我们需要找到24*b
。因为24是一个简单的数字,所以我将跳过显示它的完整浮点表示形式,只需将b
乘以24即可。我们只需将其有效位乘以24,即可得出:
24*b = 11000.0000000000000000111 1 • 28
1.11000000000000000001111000000000000000000000 • 233
0.00000000000000000000110000000000000000001000 • 233
当处理器添加数字时,它会有效地移动有效位以对齐表示相同幅度的位。将这些数字对齐会产生:
24*b = 11000.0000000000000000111 1 • 28
1.11000000000000000001111000000000000000000000 • 233
0.00000000000000000000110000000000000000001000 • 233
所以我们可以看到计算结果在最后一位是正确的,发生的舍入误差的数值要低得多。你应该问老师,她解释中的内容是否对你不清楚可能的重复,你应该问老师,她解释中的内容是否对你不清楚可能的重复乘以24(3*8=乘以3,并将指数移动3)需要25位有效位,因为LSB是1。。。1.1000000000000000001111•212前2位高于大数字的LSB,即210,并将计入结果中。但是原始最小数的最后3个尾随位太远了。这就好像它们在手术前被截断了一样(但我不喜欢这样看,我更喜欢Eric的观点),当我第一次看到这个问题时,我不清楚OP是什么意思。但现在我想他们可能是指将
1*a
添加到24*b
,其中a
和b
是两个数字。我计划在有时间的时候更新显示加法的答案。乘以24(3*8=乘以3并将指数移位3)需要25位有效位,因为LSB是1。。。1.1000000000000000001111•212前2位高于大数字的LSB,即210,并将计入结果中。但是原始最小数的最后3个尾随位太远了。这就好像它们在手术前被截断了一样(但我不喜欢这样看,我更喜欢Eric的观点),当我第一次看到这个问题时,我不清楚OP是什么意思。但现在我想他们可能是指将1*a
添加到24*b
,其中a
和b
是两个数字。我计划在我有时间的时候更新答案,显示添加的内容。
1.11000000000000000010101 000000000000000001000 • 233
1.11000000000000000010101 • 233
1.110000000000000000101010000000000000000001111000 • 233