#797·Bend

JS 后端违反了机器检查定理: F32 不保留信号 NaN 位 (由 opus 4.8 发现)

作者: computer-whisperer创建于 2026年9月18日更新于 2026年9月18日
标签bug

(发现并报告由Opus 4.8编写)

你所做的一切 # # What you did

弯曲 nan.bend #检查,然后运行主(又:弯曲 nan.bend -o nan.js QQ 节点 nan.js) .

发生了什么事#

  • 包括证明
zz
def 定理 () - > {roundtrip () == sNaN (): U32}:
{==}

即检查器验证出"圆通通通通通通通通通通通通通通通通通通通通通通通通通通通. 但运行程序打印

2143289345 (英语).

验收器被证明等于2139095041'的术语在运行时被评价为2143289345'。 这个 机检定理在编译程序中是虚假的,所以"LAWS.bend'的核心承诺——"a. 被证实的财产不能被侵犯"——不持有JS后端.

□文件

[Python] 导入基数

#F32是F32{数据:Word(32n)},所以将一款U32的32比特重新解释为F32 #而后是32位词上的身份. f32(u:U32) - > F32: U32{w} = u (韩语) F32{w} (法语) def 位点( f: F32- > U32: F32{w} = f (帮助) U32{w} (韩语)

def sNaN () - > U32: # 0x7f800001,一个信号为NaN {2139095041: U32} (韩语). def 圆通( ) - > U32: 位元( as f32( sNaN ()))

机器检查: 圆行不改变位数

def 定理 () - > {roundtrip () == sNaN (): U32}: {==}

但编译的程序打印出 2143289345 (0x7fc00001)

daf 主 () - > IO(单位): IO.print(U32.show(圆通))


QQ 弯曲 -- version

2.0.5 弯曲

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}这跟以前一样

Linux x86 64 (英语).

QQ Clang -- 版本( 第一行)

crange 版本 22.1.8 — *(无关:C后端未受影响) *

□ 根源

" bend2/comp.ts " , " OPTIMIZED.F32 " 代表JS道上的 " F32 " ,是JS的原生号码:


F32: {.
intr : {F32:"从 bits(word to u32 ($0))"}, // 构造: word - > u32 - > 本地浮点
elim: {F32: ["u32 to word(f32 bits ($0))"]}, // 解构: 土生土长- > u32 - > 单词
{\fn华文楷体\fs16\1cHE0E0E0}

因此,bits(as f32(u))'下调至f32 bits(f32 from bits(u))''。 来回旅行不是 表示NaN的特性,因为 " float32 " sNaN无法从一个 联合来文编号( " Float32 Array " / " Uint32 Array " ):静态点被设定。

0x7f80001 -- f32  from bits/f32 bits- > 0x7fc0001 (静态位集)
0x7fa00000 - > 0x7f0000000 (英语).
0x7 fffffff - > 0x7 fc000000 (英语).
0x800000000 (-0), 0x7f8000000 (+inf), 限定值: 保存

检查器(bend2/bend.ts')没有当地流动代表——它保留了F32'作为它的 `Word(32n)',从未转换为机器浮点数——因此,在“bits(as f32(u)) = u”类型中 确切地说, " 定理 " 的证据也通过。 检查器的“ F32” 模型( 精确的 32 位) 而JS的后台模式(一个本土的双重)则有分歧,分歧是可观察到的 从证明代码。

□ 范围

  • ** JS道:**`bend f.bend-o f.js'、包/节点 '.bend ' 装载器和浏览器捆绑器。
  • C道很好:f32 from bits'/f32 bits'是那里的位点,它保存了图案. 当地验证的 " 0x7f80001 " 圆路,通过 " memcpy " 位点和 x86 64的 " f32 " 登记。
  • 主办实验室 . . . . . . .

内容来源: HigherOrderCO/Bend