当前位置: 首页 > news >正文

QuickJS 如何计算黄金分割率 ?

参阅: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/aconst 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 = 0const 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ₙ = (φⁿ - (-φ)⁻ⁿ)/√5return 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
`);

关键数学知识

  1. 黄金分割率定义

    φ = \frac{1 + \sqrt{5}}{2} \approx 1.6180339887...
    
  2. 独特数学性质

    • φ = 1 + 1/φ
    • φ² = φ + 1
    • φ = [1; 1, 1, 1, …] (连分数表示)
  3. 斐波那契关联

    \lim_{n \to \infty} \frac{F_{n+1}}{F_n} = \phi
    

各方法对比

方法精度计算速度适用场景
直接公式计算★★★★☆极快通用计算
斐波那契逼近★★☆☆☆教学演示
连分数迭代★★★☆☆中等展示数学表示
代数方程解法★★★★☆数学原理验证
高精度模块★★★★★科学计算、精确设计

建议在 QuickJS 中使用直接公式计算法,它既精确又高效。对于需要高精度的场景(如金融或设计领域),可使用高精度模块并设置更多小数位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/225192.html

相关文章:

  • Microsoft Fabric - 尝试一下Data Factory一些新的特性(2025年5月)
  • 【前端】成长路线
  • day16 leetcode-hot100-32(链表11)
  • AI视频“入驻”手机,多模态成智能终端的新战场
  • DQN和DDQN(进阶版)
  • maven中的maven-antrun-plugin插件详解
  • comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 1
  • 设计模式——模版方法设计模式(行为型)
  • 开源库免费API服务平台 ALLBEAPI
  • Notepad++找回自动暂存的文件
  • 【C/C++】面试常考题目
  • robot_lab学习笔记【MDP综述】
  • 学习BI---BI看板的生命周期
  • 鸿蒙HarmonyOS —(cordova)研发方案详解
  • 仓颉鸿蒙开发:制作底部标签栏
  • 鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
  • Spring Boot 中的 Web 应用与 Reactive Web 应用
  • React 路由管理与动态路由配置实战
  • Java中的JSONObject详解:从基础到高级应用
  • 【数据结构】图的存储(十字链表)
  • 什么是子查询?相关子查询的性能问题?
  • 高效Excel数据净化工具:一键清除不可见字符与格式残留
  • 批量导出CAD属性块信息生成到excel——CAD C#二次开发(插件实现)
  • 重读《人件》Peopleware -(14)Ⅱ 办公环境 Ⅶ 把门带上
  • 【解决】【亲测下载obsidian可行】打不开github.com 或者 加速访问 github
  • 从零开始的git学习
  • [ElasticSearch] RestAPI
  • Spring Boot,注解,@ConfigurationProperties
  • OpenFeign和Gateway集成Sentinel实现服务降级
  • 网络协议的原理及应用层