如何解决以线程安全的方式快速将 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))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。