c - 以线程安全的方式快速将 double 转换为 uint64_t
问题描述
我有以下在并行循环中调用的函数。我已经union
在下面的函数内部声明了线程安全。问题是这样做会很慢。我的问题是是否有一种方法可以将其double
变成uin64_t
(与此方法相同union
)但以更快的方式?谢谢你。
uint64_t flip(double d) {
union {double d; uint64_t u64;} u;
u.d = d;
return u.u64 ^ (-(u.u64 >> 63) | 0x8000000000000000ULL);
}
我正在使用 gcc 来编译代码。
解决方案
您可以尝试将其作为宏重新执行,以消除函数的call
开销return
:
#define DOUBLE_TO_UINT64(d) ((*(uint64_t *)(&(d))) ^ (-( (*(uint64_t *)(&(d))) >> 63) | 0x8000000000000000ULL))
推荐阅读
- javascript - 如何将画布更改为水平而不滚动?
- python - 有没有更简单的方法来输入多个名称并相应地存储它们?
- chisel - chisel中如何自由给vec类型变量赋值?
- mnist - holoviews 不显示 PIL 图像格式
- react-native - React Native Invariant Violation 错误,但似乎没有任何问题
- linux - 在linux中打开带有特殊字符的文件
- python - 类实例化和方法的 pytest 模拟异常
- python - 在键是元组的字典中,删除在特定位置没有特定值的所有键
- jenkins - Jenkins文件中单个阶段内的多个when子句
- python - 无法从 NumSharp.NDArray 转换为 OpenCvSharp.InputArray