参阅:bellard.org : QuickJS 如何使用 qjs 执行 js 脚本
在 QuickJS 中计算黄金分割率(φ)有多种方法,以下是几种精确且高效的计算方案:
1. 直接数学公式计算(推荐)
// 黄金分割率 φ = (1 + √5)/2 ≈ 1.618033988749895
function goldenRatio() {
return (1 + Math.sqrt(5)) / 2;
}
// 使用示例
console.log("黄金分割率:", goldenRatio()); // 1.618033988749895
2. 斐波那契数列逼近法
function fibonacciGoldenRatio(precision = 15) {
let a = 1n, b = 1n; // 使用 BigInt 避免整数溢出
// 计算足够大的斐波那契数
for (let i = 0; i < precision + 10; i++) {
[a, b] = [b, a + b];
}
// 计算比例 b/a
const ratio = Number(b * 1000000000000000n / a) / 1000000000000000;
return ratio;
}
// 使用示例
console.log("斐波那契逼近:", fibonacciGoldenRatio(20)); // 1.618033988749895
3. 连分数表示法(数学精确)
function continuedFraction(depth = 20) {
let result = 1;
for (let i = 0; i < depth; i++) {
result = 1 + 1 / result;
}
return result;
}
// 使用示例
console.log("连分数计算:", continuedFraction(50)); // 1.618033988749895
4. 代数方程解法(解 φ² = φ + 1)
function solveQuadratic() {
// 解方程 x² - x - 1 = 0
const a = 1, b = -1, c = -1;
const discriminant = b * b - 4 * a * c;
return (-b + Math.sqrt(discriminant)) / (2 * a);
}
5. 精确计算模块(高精度)
// 高精度计算模块
const GoldenRatio = {
// 精确值表达式
EXACT: "(1 + √5)/2",
// 数值计算
value: function(precision = 15) {
const sqrt5 = Math.sqrt(5);
const phi = (1 + sqrt5) / 2;
return Number(phi.toFixed(precision));
},
// 生成斐波那契数列
fibonacci: function(n) {
const phi = this.value(20);
// 使用通项公式 Fₙ = (φⁿ - (-φ)⁻ⁿ)/√5
return Math.round((Math.pow(phi, n) - Math.pow(-phi, -n)) / sqrt5);
}
};
// 使用示例
console.log("精确值表达式:", GoldenRatio.EXACT);
console.log("数值计算:", GoldenRatio.value(20));
console.log("斐波那契第10项:", GoldenRatio.fibonacci(10)); // 55
黄金分割率特性验证
// 验证 φ = 1 + 1/φ
const phi = GoldenRatio.value(20);
console.log("验证 φ = 1 + 1/φ:", phi === 1 + 1/phi); // true(计算误差内)
// 验证 φ² = φ + 1
console.log("验证 φ² = φ + 1:", Math.abs(phi*phi - phi - 1) < 1e-15); // true
应用示例:黄金矩形生成
function createGoldenRectangle(width) {
const phi = (1 + Math.sqrt(5)) / 2;
return {
width: width,
height: width / phi,
// 分割点:按黄金比例分割
splitPoint: width / phi
};
}
// 创建黄金矩形
const rect = createGoldenRectangle(1000);
console.log(`
黄金矩形尺寸:
宽度: ${rect.width.toFixed(2)}px
高度: ${rect.height.toFixed(2)}px
黄金分割点: ${rect.splitPoint.toFixed(2)}px
`);
关键数学知识
-
黄金分割率定义:
φ = \frac{1 + \sqrt{5}}{2} \approx 1.6180339887... -
独特数学性质:
- φ = 1 + 1/φ
- φ² = φ + 1
- φ = [1; 1, 1, 1, …] (连分数表示)
-
斐波那契关联:
\lim_{n \to \infty} \frac{F_{n+1}}{F_n} = \phi
各方法对比
| 方法 | 精度 | 计算速度 | 适用场景 |
|---|---|---|---|
| 直接公式计算 | ★★★★☆ | 极快 | 通用计算 |
| 斐波那契逼近 | ★★☆☆☆ | 慢 | 教学演示 |
| 连分数迭代 | ★★★☆☆ | 中等 | 展示数学表示 |
| 代数方程解法 | ★★★★☆ | 快 | 数学原理验证 |
| 高精度模块 | ★★★★★ | 快 | 科学计算、精确设计 |
建议在 QuickJS 中使用直接公式计算法,它既精确又高效。对于需要高精度的场景(如金融或设计领域),可使用高精度模块并设置更多小数位。

9166



被折叠的 条评论
为什么被折叠?



