javascript - 在 Javascript 中生成 LLVM 浮点十六进制文字

标签 javascript floating-point type-conversion llvm

我正在尝试生成包含浮点文字的 LLVM 文本 IR。为了使其可靠地工作,我需要能够将 float 转换为其十六进制文字表示形式。例如,结果应如下:

f2hex(0.0001)    -> "0x3F1A36E2E0000000"
f2hex(0.1)       -> "0x3FB99999A0000000"
f2hex(1.1)       -> "0x3FF19999A0000000"
f2hex(3.33333)   -> "0x400AAAA8E0000000"
f2hex(4.9)       -> "0x40139999A0000000"
f2hex(111.99998) -> "0x405BFFFFA0000000"

我会满足于算法的详细描述(不依赖于 Javascript 不可用的库或机器代码),但工作的 Javascript 代码更好。

LLVM 语言引用在这里描述了格式:http://llvm.org/docs/LangRef.html#simple-constants

最佳答案

您想要做的是转储 double 的二进制表示形式。以下是在 C 中完成的方法:

float f = ... // also works with double
char str[19];
sprintf(str, "0x%llX", f);

要在 Javascript 中执行此操作,您需要提取 float 的二进制表示形式。这并不是一件小事,但幸运的是,Stackoverflow 上似乎已经有一个解决方案:Read/Write bytes of float in JS (具体来说,this answer 似乎很方便)

关于javascript - 在 Javascript 中生成 LLVM 浮点十六进制文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072354/

相关文章:

go - CRC - uint64 到两个字节?

bash - 管道 awk 输出以添加到循环内的变量

python - 浮点计算和控制流

Matlab 快速数据类型转换 4x1byte 到 1x32byte

javascript - 使用 JavaScript 实时生成结果

c - 如果 -0.0 之后的下一个可表示值是 +0.0,那么为什么 nextafter(-0.0, INFINITY) 不返回 +0.0?

sql - 如何将毫秒转换为时间(hh :mm:ss) in Oracle

javascript for 循环进入无限循环

javascript - 在浏览器选项卡之间传递变量

javascript - 帮助我理解 javascript :void(null)