gpt4 book ai didi

c - 在 C 中有效地提取 double 的小数部分

转载 作者:太空狗 更新时间:2023-10-29 16:27:17 34 4
gpt4 key购买 nike

我正在寻找一个 IEEE double 并以最有效的方式删除它的任何整数部分。

我要

1035 ->0
1045.23->0.23
253e-23=253e-23

我不关心正确处理非正规数、无穷大或 NaN。我不介意有点麻烦,因为我知道我正在使用 IEEE double ,所以它应该可以跨机器工作。

无分支代码会更受欢迎。

我的第一个想法是(伪代码)

char exp=d.exponent;
(set the last bit of the exponent to 1)
d<<=exp*(exp>0);
(& mask the last 52 bits of d)
(shift d left until the last bit of the exponent is zero, decrementing exp each time)
d.exponent=exp;

但问题是,在指数的最后一位为零之前,我想不出一种有效的方法将 d 左移,而且如果所有最后一位都未设置,似乎需要输出零.这似乎与以 2 为底的对数问题有关。

对于此算法或任何更好的算法的帮助将不胜感激。

我可能应该注意到,我想要无分支代码的原因是因为我希望它能够高效地向量化。

最佳答案

来点简单的怎么样?

double fraction = whole - ((long)whole);

这只是从值本身减去 double 的整数部分,余数应该是小数部分。当然,这可能会出现一些表示问题。

关于c - 在 C 中有效地提取 double 的小数部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5589383/

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