gpt4 book ai didi

将 float 拆分为另外两个数字的总和,没有舍入错误

转载 作者:行者123 更新时间:2023-12-02 08:27:27 25 4
gpt4 key购买 nike

我不知道是否可以这样做,但我需要将一个 float 拆分为两个数字的总和...

例如,假设 x 是一个 float ,我们想将其拆分为x = I + f,其中I是带符号的整数部分,而f是带符号的小数部分,两者都是 float ,我猜这样拆分可以准确实现(即没有 fp 错误,我的意思是)。

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

我自己实现了拆分 x = I + f,然后求和并添加 1.0 我提出了第二个拆分,但基本上它受到浮点舍入误差此类操作的影响。

最佳答案

(示例使用 double )

I was wondering if it is possible to split somehow x = (I-1.0) + (f + 1.0), namely without floating point rounding error.

不可能对所有值都进行这样的拆分。取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 , 不存在。

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

关于将 float 拆分为另外两个数字的总和,没有舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30781977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com