【发布时间】:2020-11-23 03:11:21
【问题描述】:
我正在尝试查找或找出将带符号的 64 位 int(二进制补码,natch)转换为最接近的值 IEEE double(64 位)的算法,保持按位运算。我在寻找什么for 用于通用的“类 C”伪代码;我正在一个不是 C 且没有本机 int64 类型的平台上实现一个玩具 JVM,所以我在 8 字节数组上进行操作(幸运的是,它的细节超出了这个范围),这就是域数据需要保留。
所以:输入是一个 64 位的大端字符串,带符号的二进制补码。输出是 IEEE 双格式的 64 位大端字符串,表示尽可能接近原始 int64 值。中间是一些面具,班次等!算法绝对不需要特别聪明或优化。我只是希望能够得到结果并理想地了解过程是什么。
因为我怀疑这是一个不寻常的需求,所以无法追踪到这个。 This answer 解决了 x86 SSE 中的一个平行问题(我认为),但我不会说 SSE,我的尝试和翻译让我更加困惑而不是开明。
希望有人指出正确的食谱方向,或者理想地解释背后的按位数学,以便我真正理解它。谢谢!
【问题讨论】:
-
您有关于转换的具体问题吗?得到尾数是微不足道的,你可以通过“最高设置位”对数近似得到指数,对吧?
-
@CarlNorum:不幸的是,你已经有点失去我了。我理解 double 的按位分量在理论上代表什么,但我对如何填充这些位以反映 int64 的最准确表示非常模糊。 (保存很明显的符号位。)当你说尾数是微不足道的..你能给我另一个提示吗? :) 我也不熟悉最高设置位对数近似,但我会继续寻找。谢谢
-
有效位将与您现有的 64 位 int 具有相同的(二进制)数字。它已经是二的幂数。
-
好的,我写了一个基本的(可能很糟糕)实现。让我整理一下,我会写一个答案。
标签: c double bit-manipulation ieee-754 int64