计算π的近似值

文章介绍了两种使用Python编程计算π的近似值的方法,一种是通过while循环,当某项绝对值大于等于10^-4时结束,另一种是利用for循环,当项的绝对值大于等于1e-8时停止。这两种方法都是基于级数求和来逼近π的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题描述】计算π的近似值,当任意项的绝对值小于10-4时结束计算。

【输入形式】无输入
【输出形式】输出语句参考:print("pi的近似值={:f}".format(4*s))

【样例输入】
【样例输出】
【样例说明】
【评分标准】

sum=0
n=1
while abs(((-1)**(n-1))/(2*n-1))>=10**(-4):
    sum+=((-1)**(n-1))/(2*n-1)
    n+=1
print("pi的近似值={}".format(4*sum))
import math

n=100000000000000000
pi=0
for j in range (1,n):
    l=((-1)**(j-1))/(2*j-1)

    pi = pi + 4 * l
    if math.fabs(l)<10**(-4):
        break

print(pi)

【问题描述】通过以下近似公式求π的近似值,当某项小于0.00000001(即1e-8)时停止循环。

image.png

【输入形式】
【输出形式】输出语句可参考:print("pi的近似值为{:.8f}".format(2*s))

【样例输入】
【样例输出】
【样例说明】
【评分标准】

s = 0
n = 0
item = 1

while abs(item) >= 1e-8:
    s += item
    n += 1
    item *= n / (2*n + 1)

print("pi的近似值为{:.8f}".format(2 * s))

### 使用双向链表计算 π 的近似值 π 是一个无理数,其精确值无法通过有限次运算得出。然而,可以通过数值方法来逼近它的值。一种常见的方法是利用级数展开式(如莱布尼茨级数),并通过数据结构存储中间结果以提高效率。 以下是基于双向链表实现 π 近似值的一种方式: #### 双向链表定义 为了便于操作,先定义一个简单的双向链表节点类 `Node` 和链表管理器类 `DoublyLinkedList`[^4]。 ```python class Node: def __init__(self, value=0): self.value = value self.prev = None self.next = None class DoublyLinkedList: def __init__(self): self.head = None self.tail = None def append(self, value): new_node = Node(value) if not self.head: self.head = self.tail = new_node else: self.tail.next = new_node new_node.prev = self.tail self.tail = new_node def get_values(self): values = [] current = self.head while current: values.append(current.value) current = current.next return values ``` #### 莱布尼茨级数与双向链表结合 莱布尼茨级数用于估算 π 值的公式如下: \[ \pi \approx 4 \times (1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + ...) \] 可以将每一存入双向链表中,并逐步累加求和。具体过程如下: 1. 初始化双向链表为空。 2. 将级数中的每一依次加入到链表中。 3. 遍历链表并累积求和。 下面是完整的 Python 实现代码: ```python def calculate_pi_with_doubly_linked_list(n_terms): dll = DoublyLinkedList() sign = 1 for i in range(1, n_terms * 2, 2): term_value = sign / i dll.append(term_value) sign *= -1 # 切换正负号 terms = dll.get_values() pi_approximation = 4 * sum(terms) return pi_approximation # 测试函数 n = 1000000 # 计算前一百万 result = calculate_pi_with_doubly_linked_list(n) print(f"Approximated Pi with {n} terms: {result}") ``` 上述代码实现了以下功能: - 定义了一个双向链表,用来保存莱布尼茨级数的各- 对于指定数量的 \( n\_terms \),逐一代入公式并将结果存入链表。 - 最终遍历链表并对所有求和,乘以 4 得到 π 的近似值。 这种方法虽然简单易懂,但由于涉及大量内存分配和指针操作,在大规模计算可能不如数组或其他连续存储结构高效[^5]。 --- #### 性能优化建议 如果希望进一步提升性能,可以考虑减少动态内存分配次数或者改用更高效的算法(如蒙特卡罗模拟)。不过需要注意的是,这些改进可能会牺牲部分清晰性和可读性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值