这个问题可能会被问到,但我搜索到了,找不到答案.
我正在实现一个玩具虚拟机,其中OpCodes采用以下形式:
std::tuple<int8_t, int64_t, int64_t> // instruction op1, op2
Run Code Online (Sandbox Code Playgroud)
我正在尝试将一个double打包到其中一个操作数中,并在处理它时再次读回它.这不能可靠地工作.
double d = ...
auto a = static_cast<int64_t>(d);
auto b = static_cast<double>(a)
// sometimes, b != d
Run Code Online (Sandbox Code Playgroud)
有没有办法将double的位表示打包成int64_t,然后读取该位模式返回得到与之前完全相同的双精度数?
static_cast执行值转换 - 小数部分总是丢失.memcpy是你所追求的.
double d = ...
int64_t a;
memcpy(&a, &d, sizeof(a));
double d2;
memcpy(&d2, &a, sizeof(d2));
Run Code Online (Sandbox Code Playgroud)
尽管如此,我可能会改为将操作数设置union为a double和a int64_t(以及其他可能对您的VM感兴趣的类型).
| 归档时间: |
|
| 查看次数: |
615 次 |
| 最近记录: |