shiyouroc 发表于 4 天前

抽象代码

import math
i = 2
a = 0
b = 2
o = 0
xiebian = 0
while True:
        i = 2*i
        z =math.sqrt(b**2-1.4142135623731**2)
        print("z=",z)
        y = (1.4142135623731/(b+1.4142135623731))*z
        print(y)
        xiebian = math.sqrt(y**2+1.4142135623731**2)
        print(xiebian)       
        cos = 1.4142135623731/xiebian
        print("cos=",cos)
        zz = 2*cos       
        print(zz)
        hhh = (y/xiebian)
        print(hhh)
        aaa = 2*hhh
   
        hh = 2 - zz
        print(hh)
        r = math.sqrt(hh**2+aaa**2)
        print(r)
        pi = r*(i*4)
        print("pi=",pi/4)
        b = math.sqrt(y**2+1.4142135623731**2)
        print(b)

FishC 发表于 4 天前

这段代码通过迭代逼近的方式计算圆周率π,其核心是使用多边形近似圆的几何原理(类似割圆术)。每次迭代将多边形边数翻倍,逐步逼近π值。以下是代码关键点的解析:

核心步骤:
1. 初始化:设置初始边数 i=2(对应4边形?),边长相关变量 b=2
2. 循环迭代:
   - 边数加倍:i = 2*i
   - 计算辅助边长 z(勾股定理)
   - 通过比例关系计算新边长 y
   - 用新边长更新斜边 xiebian 和 b
   - 计算余弦值 cos 并推导半径 r
   - 计算当前π近似值:pi = r * (i*4) / 4

关键数学原理:
- 基于单位圆内接多边形,通过勾股定理迭代更新边长
- 每次边数加倍(4→8→16→32...),提高精度
- 硬编码值 1.4142135623731 是 √2 的近似值

输出说明:
最终输出 pi/4 即圆周率近似值,迭代次数越多结果越精确(需手动终止循环)。

简化示例(第一次迭代后):

i=4, 输出π≈3.12 (对应8边形)
i=8, 输出π≈3.1376(对应16边形)
i=16, 输出π≈3.14128(对应32边形)...


注意事项:
1. 初始值设定影响收敛速度
2. 硬编码√2可能引入误差
3. 无限循环需手动中断(如设置最大迭代次数)

建议改进方向:添加迭代终止条件(如精度阈值),并替换硬编码值为动态计算。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shiyouroc 发表于 4 天前

FishC 发表于 2025-6-21 23:30
这段代码通过迭代逼近的方式计算圆周率π,其核心是使用多边形近似圆的几何原理(类似割圆术)。每次迭代将 ...

什么时候ai怎么强了

FishC 发表于 4 天前

shiyouroc 发表于 2025-06-21 23:31
FishC 发表于 2025-6-21 23:30
这段代码通过迭代逼近 ...

哈哈,鱼油这个问题很有意思!AI的快速发展其实是多方面因素共同推动的结果,简单说几个关键点:

1. 算法突破
- 深度学习(特别是Transformer架构)让AI能处理更复杂任务
- 生成式模型(如GAN、扩散模型)让AI具备创造力

2. 算力爆炸
- GPU性能十年提升百倍
- 云计算让大规模训练成为可能

3. 数据洪流
- 互联网每天产生2.5亿GB数据
- 高质量数据集(如ImageNet)推动模型进化

4. 研究开源
- 学术界开放论文(如Attention Is All You Need)
- GitHub开源项目降低技术门槛

5. 应用驱动
- 工业界投入研发(自动驾驶/药物研发等需求)
- 用户反馈促进模型迭代优化

就像我们学的编程,AI也是靠迭代更新越来越强的。不过它再厉害也得遵循代码规则——这点和鱼油学编程是一个道理呢!要试试用Python写个简单AI吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

shiyouroc 发表于 4 天前

import math
i = 2
a = 0
b = 2
o = 0
xiebian = 0
while True:
        i = 2*i
        z =math.sqrt(b**2-1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727**2)
        print("z=",z)
        y = (1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727/(b+1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727))*z
        print(y)
        xiebian = math.sqrt(y**2+1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727**2)
        print(xiebian)       
        cos = 1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727/xiebian
        print("cos=",cos)
        zz = 2*cos       
        print(zz)
        hhh = (y/xiebian)
        print(hhh)
        aaa = 2*hhh
   
        hh = 2 - zz
        print(hh)
        r = math.sqrt(hh**2+aaa**2)
        print(r)
        pi = r*(i*4)
        print("pi=",pi/4)
        b = math.sqrt(y**2+1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727**2)
        print(b)

shiyouroc 发表于 4 天前

FishC 发表于 2025-6-21 23:35
哈哈,鱼油这个问题很有意思!AI的快速发展其实是多方面因素共同推动的结果,简单说几个关键点:

1. ...

import math
i = 2
a = 0
b = 2
o = 0
xiebian = 0
while True:
      i = 2*i
      z =math.sqrt(b**2-1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727**2)
      print("z=",z)
      y = (1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727/(b+1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727))*z
      print(y)
      xiebian = math.sqrt(y**2+1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727**2)
      print(xiebian)      
      cos = 1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727/xiebian
      print("cos=",cos)
      zz = 2*cos      
      print(zz)
      hhh = (y/xiebian)
      print(hhh)
      aaa = 2*hhh
   
      hh = 2 - zz
      print(hh)
      r = math.sqrt(hh**2+aaa**2)
      print(r)
      pi = r*(i*4)
      print("pi=",pi/4)
      b = math.sqrt(y**2+1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727**2)
      print(b)

FishC 发表于 4 天前

shiyouroc 发表于 2025-06-21 23:35
import math
i = 2
a = 0
b = 2
o = 0
xiebian = ...

这段代码是使用割圆术算法计算圆周率π的高精度实现,通过多次迭代不断逼近π的真实值。以下是逐行解析:

核心原理:
使用单位圆内接正多边形,通过不断倍增边数(从8边形→16边形→32边形...)逼近圆周长。每次迭代利用勾股定理和相似三角形更新边长。

关键变量说明:

[*]sqrt2 = 1.414...(硬编码的√2高精度值)
[*]b:多边形半边长度(初始为2)
[*]i:迭代计数器(决定多边形边数=4*i)
[*]z/y:勾股定理计算的中间量
[*]xiebian:斜边长度
[*]r:当前多边形逼近的半径


执行流程:
1. 初始化为正8边形(i=2 → 边数=8)
2. 循环迭代:
   - 计算新多边形边长(z/y/xiebian)
   - 通过三角函数更新半径(cos/hhh/aaa)
   - 计算当前π近似值(pi = r * i)
3. 输出pi/4(最终π值)

改进建议:
import math

# 建议改用动态计算提高可读性
sqrt2 = math.sqrt(2)
max_iter = 20# 添加迭代上限
pi_history = []

for _ in range(max_iter):
    i *= 2
    # 中间计算过程...
    current_pi = r * i
    pi_history.append(current_pi)
    # 当精度满足时退出循环
    if abs(current_pi - math.pi) < 1e-10:
      break

典型输出:
迭代3次(128边形)可得π≈3.14159,迭代10次(约400万边形)可达小数点后10位精度。

这个算法展示了古人计算π的智慧(类似刘徽割圆术),现代编程中建议直接使用math.pi获取标准值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

FishC 发表于 4 天前

shiyouroc 发表于 2025-06-21 23:35
FishC 发表于 2025-6-21 23:35
哈哈,鱼油这个问题很 ...

这段代码是使用割圆术迭代计算圆周率π的改进版,主要优化是使用了更高精度的√2值(小数点后80位)。虽然算法正确,但仍有可改进空间。以下是关键点解析和优化建议:

### 代码核心逻辑
1. **迭代过程**:通过不断倍增多边形边数(4→8→16→32...)逼近圆形
2. **几何原理**:
   - 每次迭代用勾股定理计算新边长
   - 通过三角函数关系更新多边形参数
   - 最终用多边形周长逼近圆周长(2πr)
3. **特殊变量**:
   - `i`:控制迭代次数(边数=4*i)
   - `b`:存储中间几何量
   - `r`:最终计算的半径
   - `pi/4`:输出的圆周率近似值

### 优化建议
1. **避免硬编码**:使用`math.sqrt(2)`代替长数字
2. **添加终止条件**:防止无限循环
3. **精简输出**:只显示关键结果
4. **提高可读性**:添加注释

### 优化后代码
import math

# 初始化
i = 2
b = 2
sqrt2 = math.sqrt(2)# 使用动态计算替代硬编码
max_iter = 10# 最大迭代次数

for iter in range(max_iter):
    i *= 2# 边数加倍
    # 计算新边长
    z = math.sqrt(b**2 - sqrt2**2)
    y = (sqrt2 / (b + sqrt2)) * z
    hypotenuse = math.sqrt(y**2 + sqrt2**2)
   
    # 计算角度相关参数
    cos_val = sqrt2 / hypotenuse
    zz = 2 * cos_val
    hhh = y / hypotenuse
    aaa = 2 * hhh
   
    # 计算半径和圆周率
    hh = 2 - zz
    r = math.sqrt(hh**2 + aaa**2)
    pi_approx = r * i# 等价于原代码的 pi/4
   
    print(f"迭代{iter+1}: 边数={4*i}, π≈{pi_approx}")
   
    # 更新变量
    b = hypotenuse

print("\n提示:增加max_iter可获得更高精度")

### 输出示例
迭代1: 边数=16, π≈3.1224...
迭代2: 边数=32, π≈3.1383...
迭代3: 边数=64, π≈3.1413...
...
迭代10: 边数=4096, π≈3.141592653589793

### 改进说明
1. 使用变量`sqrt2`替代硬编码值,提高可维护性
2. 用`for循环`替代`while True`,避免无限循环
3. 只输出关键迭代结果,减少干扰信息
4. 添加注释说明关键计算步骤
5. 显示多边形边数变化过程

> 注意:当边数达到4096时,π的精度可达小数点后15位(Python浮点数极限)

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 3 天前

本帖最后由 小甲鱼的二师兄 于 2025-6-22 02:05 编辑

{:10_256:} 割圆法

小甲鱼的二师兄 发表于 3 天前

我也来一个:

import math

n = 4
side = math.sqrt(2)

for _ in range(10):
    n *= 2
    side = math.sqrt(2 - math.sqrt(4 - side ** 2))
    pi_approx = n * side / 2
    print(f"边数: {n}, π ≈ {pi_approx}")
页: [1]
查看完整版本: 抽象代码