gpt4 book ai didi

c - C 中 double 的二元运算

转载 作者:行者123 更新时间:2023-11-30 17:42:39 25 4
gpt4 key购买 nike

我正在研究大规模模拟的高速计算问题。为了加快这个过程,我希望进行一些优化,其中之一是仅在几个周期内计算 double 值的绝对值而无需跳转。

我的想法是,64 位 double 值用 1 位符号位、11 位指数和 52 位尾数表示。因此,使用掩码进行双值异或运算:10000000 00000000 00000000 00000000 将产生所需的结果:

double abs(double x) {
double mask = -0.0e0;
return x^mask;
}

现在显然没有什么理由需要对 double 进行二进制运算,因此编译器自然会抛出错误:

error: invalid operands to binary ^ (have ‘double’ and ‘double’)

我想知道是否有任何方法可以快速完成这项工作,因为我不希望像其他地方所建议的那样将整个事情转换为字符数组并返回。这在某种程度上违背了快速计算的目的。

感谢所有帮助...

最佳答案

@Artur 的变体:
.. 使用匹配大小的整数。
.. 用 double 初始化 union。不是更快,而是更紧。

#include <stdint.h>
double Abs_double(double d) {
union {
double d;
uint64_t u64;
} u = {d};
u.u64 &= ~( (uint64_t) 1 << 63);
return u.d;
}

注意:我会继续使用 fabs() 除非分析能够更快地显示其他解决方案。

关于c - C 中 double 的二元运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20458125/

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