Floating point 浮点数加法

Floating point 浮点数加法,floating-point,ieee-754,Floating Point,Ieee 754,我需要手动添加两个十进制浮点数。我知道我必须在每次中间计算后进行四舍五入,但没有指定小数精度。我只知道这些数字是以IEEE 754半精度格式存储的。如何在不知道精度的情况下进行舍入?您确定是指“十进制”吗?“半精度”在此上下文中表示16位宽,并且没有“十进制16”IEEE 754格式。存在“binary16”格式:。如果你想用这种格式添加数字,用二进制写下来,这会有帮助。用“十进制数字精度”来思考这些数字只会导致混淆。@PascalCuoq,我所说的“十进制”,是指问题是用十进制表示的。例如,计

我需要手动添加两个十进制浮点数。我知道我必须在每次中间计算后进行四舍五入,但没有指定小数精度。我只知道这些数字是以IEEE 754半精度格式存储的。如何在不知道精度的情况下进行舍入?

您确定是指“十进制”吗?“半精度”在此上下文中表示16位宽,并且没有“十进制16”IEEE 754格式。存在“binary16”格式:。如果你想用这种格式添加数字,用二进制写下来,这会有帮助。用“十进制数字精度”来思考这些数字只会导致混淆。@PascalCuoq,我所说的“十进制”,是指问题是用十进制表示的。例如,计算(4.874533 x 10^(-1)+1.564 x 10^3)+1.4655 x 10^(-1)。所以,我可以用十进制计算,也可以按照你的建议转换成二进制。无论如何,我需要知道进行舍入的精度,对吗?你需要知道二进制精度。在我链接到的页面上:10个显式位,一个隐式前导
1
,用于普通数字。十进制和二进制之间的转换要比两个浮点数相加困难得多,所以令人惊讶的是,一个据称是关于浮点数相加的练习会涉及转换。无论如何,Rick Regan的“探索二进制”博客很好地介绍了从十进制转换到十进制的一般问题。或者,使用C函数
strtof()
,将十进制表示转换为单精度(32位),并找到并应用一个函数从binary32转换为binary16。互联网上有很多这样的东西。这假设您必须处理的数字中不存在双舍入问题。是。从技术上讲,我的意思是,所有的计算都应该用二进制,但是如果你坚持用十进制,你必须计算每个十进制计算的精确结果(为了避免双舍入问题),然后将计算结果四舍五入到最接近的可表示二进制数16。您不能将十进制计算四舍五入到任何数量的“有效小数位数的近似数”,因为无论四舍五入多么小,它都会使应向下四舍五入的中点以下的值与中点以上的值之间存在差异…