LSR 010 - Lamina 虚数扩展
基本信息
- LSR 编号: 010
- 标题: Lamina 虚数扩展
- 作者: Ziyang-Bai
- 状态: 接受
- 类型: 标准规范
- 创建日期: 09-19-2025
- Lamina 版本: 悬而未决
摘要
本 LSR 定义 Lamina 编程语言对虚数的支持,包括数据类型、运算规则、函数接口以及与已有数字类型(int、float、rational、irrational)的兼容性。任何 Lamina 实现若支持虚数功能,必须遵守本规范以保证语言一致性。
技术规范
1. 数据类型
1.1 虚数类型
- 类型名:
complex - 描述: 用于表示复数 $a + bi$,其中
a和b可以是任意 Lamina 数值类型(int、float、rational、irrational) - 示例:
var z1 = 3 + 4i; // a=3, b=4
var z2 = 1/2 + √2*i; // a=rational(1/2), b=irrational(√2)
var z3 = 0 + 1i; // 纯虚数
var z4 = 5; // 自动视为 5 + 0i
1.2 行为规范
-
所有复数运算保持符号化和精确性:
-
有理数部分保持约分
- 无理数部分保持符号化
complex支持任意精度int及符号化rational/irrational
2. 运算符与优先级
2.1 算术运算
| 运算符 | 描述 | 示例 |
|---|---|---|
+ |
复数加法 | (3+4i) + (1+2i) = 4+6i |
- |
复数减法 | (3+4i) - (1+2i) = 2+2i |
* |
复数乘法 | (3+4i) * (1+2i) = -5+10i |
/ |
复数除法 | (3+4i) / (1+2i) = 11/5 - 2/5i |
^ |
幂运算 | (1+i)^2 = 2i |
! |
阶乘(仅允许非负整数实部,虚部必须为 0) |
2.2 函数接口
| 函数 | 描述 | 示例 |
|---|---|---|
abs(z) |
复数模 | abs(3+4i) = 5 |
arg(z) |
幅角(弧度) | arg(1+i) = π/4 |
conj(z) |
共轭复数 | conj(3+4i) = 3-4i |
re(z) |
实部 | re(3+4i) = 3 |
im(z) |
虚部 | im(3+4i) = 4 |
exp(z) |
指数函数 | exp(iπ) = -1 |
log(z) |
对数 | log(1+i) = ln(√2) + iπ/4 |
sqrt(z) |
平方根 | sqrt(-1) = i |
注意:符号化无理数运算应保持精确,例
sqrt(-4)结果为2i而非近似浮点。
3. 类型转换与兼容性
- 数值类型可自动提升为
complex:
var x = 3; // int
var y = x + 2i; // 自动提升 x 为 3+0i
complex与rational、irrational运算保持符号化:
var z = 1/2 + √2*i; // 精确表示
- 不允许虚数参与逻辑运算(
and,or)或比较(<,>)
4. 错误处理
- 非法操作抛出
TypeError或RuntimeError:
var z = 3+4i;
var w = z and true; // TypeError
var r = z < 2; // TypeError
-
阶乘仅允许实部为非负整数,虚部为 0,否则报
RuntimeError -
栈追踪保持 LSR-000 格式,包括文件名、行号、调用链
5. 示例
var z1 = 3 + 4i;
var z2 = 1/2 + √2*i;
print(abs(z1)); // 5
print(arg(z2)); // 弧度符号化表示
print(conj(z1)); // 3-4i
var z3 = z1 * z2; // 精确复数乘法
var z4 = sqrt(-9); // 3i
var x = 2;
var z5 = x + 5i; // 自动提升为 2+5i