gpt4 book ai didi

c - 处理分数乘法中的溢出

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:05 25 4
gpt4 key购买 nike

假设我想将 x 乘以 (3/8)。所以我可以使用如下移位操作得到结果(结果应该向零舍入):

int Test(int x) {
int value = (x << 1) + x;
value = value >> 3;
value = value + ((x >> 31) & 1);
return value;
}

所以我在 Test(11) 中有 4 ,在 Test(-9) 中有 -3 >。问题是,因为我先做乘法,所以我会在某些范围内溢出,在那些情况下我不会得到正确的值:

Test(0x80000000)  // returns -268435455, but it should be -268435456

我该如何解决这个问题?

最佳答案

How can I fix this? (overflow at some ranges)

先除以 8。

对于每 8 的倍数,结果精确地增加 3。所以剩下的就是找出 3/8 的数字 -7 到 7,这是 OP 的 test() 可以处理的。可能的简化。

int Times3_8(int x) {
int div8 = x/8;
int value = div8*3 + Test(x%8);
}

关于c - 处理分数乘法中的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35215301/

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