可逆定点算术(Fixed-Point Arithmetic)¶
English · 简体中文
类别 C1 · 模块
oracq.algorithms.common.arithmetic· 阶段 V1
概述¶
定点格式下的可逆算术族:加、减、乘(以及取负、绝对值、除法、倒数、开方、比较与按位逻辑等)。定点数由 FixedFormat(width, fraction, signed) 描述——width 位字长、低 fraction 位为小数、signed 时最高位为补码符号位。输出采用 XOR 语义并附带两位 status 标志:status[0] 标记定义域失效(除零、负数开方),status[1] 标记结果越出字长(而非精度界内的舍入);取整口径为向零舍入加模回绕(rounding = "toward_zero; modular_wrap")。线路由布尔网络的 compute/XOR/uncompute 模式生成,全程无脏工作区。
接口与输入模型¶
FixedFormat(width=8, fraction=3, signed=True)
fixed_arithmetic(kind, fmt=DEFAULT_FIXED_FORMAT)
API 入口:FixedFormat、fixed_arithmetic
FixedFormat:要求 \(2 \le \text{width} \le 64\) 且 \(0 \le \text{fraction} < \text{width} - \text{signed}\)(小数位不占用符号位),违例抛ValidationError;encode(value)/decode(value)在实数与补码整数间换算。DEFAULT_FIXED_FORMAT即默认的 (8, 3, 有符号)。fixed_arithmetic(kind, fmt):kind取add/sub/neg/abs/mul/div/reciprocal/sqrt/lt/eq/select/and/or/xor之一,未知值抛ValidationError;结果按(kind, fmt)以lru_cache缓存复用。
返回 Operation,寄存器为输入 a(一元 kind 只有 a;select 另有 1 位 select)加输出 out(lt / eq 为 1 位,其余 width 位)与 status: Bits(2)。本入口不消费 oracle 输入(CP:定点格式与操作种类直接参数化)。模块属性:
属性 |
含义 |
|---|---|
|
调用参数回显 |
|
|
|
布尔网络 payload(原生执行入口使用) |
实现要点¶
生成策略是先在布尔 SSA 上搭建经典组合逻辑(见布尔网络),再整体编译为可逆线路。有符号乘除走幅度域路线:两侧取绝对值,在加宽的幅度域完成乘(\(2n\) 位移位累加后取 [fraction:] 段)或带恢复余数的除法,再按异或出来的符号位回贴符号并取负;status[0] 由分母是否全零(或开方输入符号位)驱动,失效时输出 mux 到全零。溢出判据 status[1]:无符号加减用进位/借位,有符号加减用符号一致性判据(同号相加变号 / 异号相减变号),乘除与开方检查幅度是否侵入符号位。除法与倒数共用 1 / b 的除法核(倒数的分子固定为 \(2^{2f}\))。
适用边界:结果在字长内截断并模回绕,status 位是调用方判断溢出的唯一途径;精度由 fraction 事先决定,线路内无增长字长的机制。
验证方案¶
类别 C1(精确离散语义,判定准则见 ../development/validation-plan.md §2):作用算子须与经典求值逐点相等。三层证据:
结构:
tests/core/test_stage2.py:Stage2StructureTests——test_arithmetic_construction_and_basis对全部 14 种kind×FixedFormat(4, 1)逐一检查:模块含私有工作区、程序 JSON 往返相等、Toffoli/U3/CZ 基导出只含三种基门且无controlled_by。数值:
Stage2StructureTests.test_gate_network_is_executable_small_example——无符号 2 位add在a = 1, b = 2上模拟,幅度精确集中在(a, b, out, status) = (1, 2, 3, 0);同一模块的arithmetic_networkpayload 经from_payload复原后经典求值evaluate(a=1, b=2) == {"out": 3, "status": 0},电路与经典语义对拍。其余kind由结构见证与 payload 经典求值一致性覆盖,电路级数值对拍集中在add小实例。绑定:本算法无独立绑定见证(矩阵口径为 —)。真实后端上的原生执行(
arithmetic_native_registry)另由tests/integration/test_stage2_native.py:Stage2NativeTests在 PySparQ 上与参考模拟器对拍(L4 冒烟,非矩阵口径)。
数值验证¶
实验设计(tests/verification/verify_arithmetic.py,产物 out/verification/arithmetic.json,20 案例):原语算术走「OriginIR-ext 全振幅(1–8 bit)+ UniQC Circuit.to_matrix 幺正(3–4 bit)+ PySparQ RIR 宽寄存器(16/32/64 bit)」三条路径;定点编译函数(compile_function 的 Boolean SSA 降低)用叠加态一次穷举全部输入编码,对照独立经典语义逐分支核对;初等函数把「实现误差(对照模块属性 math_approximation 中的 Chebyshev 系数)」与「方法误差(系数多项式 vs 真函数)」分开报告。复现:PYTHONPATH=src <含 pysparq+uniqc 的解释器> tests/verification/verify_arithmetic.py。
案例 |
规模 |
路径 |
指标 |
|---|---|---|---|
|
w=1..8 × 4 常量 |
originir-ext + reference/rir/adapter 对拍 |
max_error ≤ 1.2e-16 |
|
w=3/4 |
originir-ext + to_matrix |
与经典置换矩阵逐元素差 = 0.0 |
|
w=16/32/64 抽样基态 |
rir-pysparq |
failures = 0;w=12 全叠加 max_error = 1.6e-17 |
xor/swap/受控算术 |
4+4+2 bit 结构化程序 |
四路径两两对拍 |
max_pairwise_deviation = 0.0 |
编译多项式 |
FixedFormat(4,1)/(6,2)/(8,3) 全域 |
rir-pysparq |
无旗标输出误差 ≤ 1 量子(判据 2 量子);status 越界集合与预测一致 |
编译 |
FixedFormat(8,4),区间 [−1,1] |
rir-pysparq |
实现误差 0.055 ≤ 2 量子;方法误差 0.0453(信息性);misflagged = 0 |
编译函数叠加对拍 |
FixedFormat(4,1) 全输入 |
四路径 |
max_pairwise_deviation = 0.0 |
已知缺口与计划阶段¶
无已知缺口(验证矩阵缺口列为 —),阶段 V1。
相关链接¶
同模块:布尔网络、Fourier 加法
源码:
src/oracq/algorithms/common/arithmetic.pyAPI 参考:可逆算术
验证矩阵:验证覆盖矩阵