【发布时间】:2020-03-04 16:12:12
【问题描述】:
我的问题类似于处理正浮点值的this question。
就我而言,我正在处理正负float 值,并希望将其存储在int64_t 类型中。
注意:我希望使用 memcpy 而不是依赖联合(在 C++ 中是 UB)。
【问题讨论】:
-
你确定这是个好主意吗?你检查过
sizeof(float)和sizeof(int64_t)吗? -
我知道这些问题。只需要支持X86_64即可。
-
@jeffreyveon:你真的想要
double,就像我回答的那样吗?我假设是因为你说int64_t。但是如果你使用float,int 类型应该是int32_t。 -
@R..GitHubSTOPHELPINGICE:或者,如果由于某种原因需要将 32 位浮点数放入 64-位整数。这可能比转换为 double 更有效,特别是如果您想更有效地恢复
float位模式(只需广播符号位、逻辑右移 1 和 XOR 低 31 位。不需要也做 double->float FP 转换。) -
@PeterCordes 我实际上是在处理浮点数,所以基本上先进行
float -> double转换。如果您可以在没有转换的情况下使用代码 sn-p 添加快速答案,我将很乐意投票,其他偶然发现此问题的人也可能受益。
标签: c++ floating-point x86-64