我不知道是否可以这样做,但我需要将一个浮点数分成两个数字...
例如,假设 x 是浮点数,我们想将其拆分 x = I + f ,其中 I 是有符号整数部分,而 f 是带符号的小数部分,两个浮点数我想这样的分裂可能完全实现(即没有fp错误)。
我想知道是否有可能以某种方式分割 x =(I-1.0)+(f + 1.0),即没有浮点舍入错误。
我自己实现了分割 x = I + f 然后求和并添加1.0我有第二个分割我呈现,但基本上它受浮点舍入错误这样的操作影响。< / p>
答案 0 :(得分:6)
(使用双精度示例)
我想知道是否有可能以某种方式分割x =(I-1.0)+(f + 1.0),即没有浮点舍入错误。
没有机会为所有值获得这样的分割。取0x1.0p-60
,其中不可分割的部分为0.0
,小数部分为0x1.0p-60
。 f + 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
和另一个值。