将浮点数拆分为两个其他数字的总和,而不会出现舍入错误

时间:2015-06-11 13:19:23

标签: split floating-point floating-accuracy

我不知道是否可以这样做,但我需要将一个浮点数分成两个数字...

例如,假设 x 是浮点数,我们想将其拆分 x = I + f ,其中 I 是有符号整数部分,而 f 是带符号的小数部分,两个浮点数我想这样的分裂可能完全实现(即没有fp错误)。

我想知道是否有可能以某种方式分割 x =(I-1.0)+(f + 1.0),即没有浮点舍入错误。

我自己实现了分割 x = I + f 然后求和并添加1.0我有第二个分割我呈现,但基本上它受浮点舍入错误这样的操作影响。< / p>

1 个答案:

答案 0 :(得分:6)

(使用双精度示例)

  

我想知道是否有可能以某种方式分割x =(I-1.0)+(f + 1.0),即没有浮点舍入错误。

没有机会为所有值获得这样的分割。取0x1.0p-60,其中不可分割的部分为0.0,小数部分为0x1.0p-60f + 1.0不精确并生成1.0,而I-1.0则完全正确并生成-1.0

不仅f + 1.0中的添加不准确:浮点值,当添加-1.0时,生成0x1.0p-60,不存在。< / p>

浮点值v总是可以精确地分成fmod(v, 1.0)v - fmod(v, 1.0)的总和,后者是一个整数,并且至少有另一种分割方式v使用IEEE 754 “Floating-point remainder”精确地在整数部分和小数部分之间,这与fmod略有不同,但是没有办法将接近0的数字拆分为浮点和1.0和另一个值。