Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Floating point 舍入浮动_Floating Point_Numbers_Floating Accuracy - Fatal编程技术网

Floating point 舍入浮动

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

首先让我给出32位浮点和十进制表示的十六进制和二进制

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