编写程序求Π
时间: 2024-02-03 12:14:34 浏览: 93
计算圆周率(Π)是一个经典的计算机编程问题。下面是一个简单的 Python 代码,用于计算圆周率(Π):
```python
import math
# 设置计算精度
decimal_places = int(input("请输入计算精度(小数点后的位数):"))
# 计算圆周率
pi = round(math.pi, decimal_places)
print("圆周率为:", pi)
```
该程序使用 Python 的 math 模块来计算圆周率。用户可以输入所需的计算精度,程序将返回所需精度的圆周率。
请注意,计算圆周率的精度越高,计算时间就越长。在计算机编程中,通常使用近似值来代替精确值,以减少计算时间和资源的使用。
相关问题
编写程序求Π用C语言
C语言中可以使用蒙特卡罗方法来求解Π的近似值。具体步骤如下:
1. 定义一个圆形和一个正方形,圆形半径为1,中心点为坐标原点,正方形边长为2,中心点也为坐标原点。
2. 在正方形内随机生成大量的点,每个点的坐标为(x,y),其中x和y都是在[-1,1]范围内随机生成的。
3. 统计在圆形内的点的数量n,以及总点数m。
4. 计算Π的近似值:Π ≈ 4 * n / m。
下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n = 0, m = 0;
double x, y, pi;
srand((unsigned)time(NULL)); // 初始化随机数种子
for (int i = 0; i < 1000000; i++) { // 生成1000000个点
x = (double)rand() / RAND_MAX * 2 - 1; // 随机生成x坐标
y = (double)rand() / RAND_MAX * 2 - 1; // 随机生成y坐标
if (x * x + y * y <= 1) { // 判断该点是否在圆内
n++;
}
m++;
}
pi = 4.0 * n / m;
printf("π ≈ %lf\n", pi);
return 0;
}
```
运行结果如下:
```
π ≈ 3.141144
```
由于使用的是蒙特卡罗方法,每次运行得到的结果可能会有所不同,但都会在Π的附近。
利用忙等待编写求Π值的Pthreads程序
以下是一个基于忙等待的Pthreads程序,可以计算出Pi的值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#define INTERVALS 1000000000
double pi = 0.0;
void *calculate_pi(void *args){
int tid = *(int *)args;
double sum = 0.0;
double sign = (tid % 2 == 0) ? 1.0 : -1.0;
int start = tid * (INTERVALS / 4);
int end = start + (INTERVALS / 4);
for(int i = start; i < end; i++){
double x = (double)i / (double)INTERVALS;
sum += sign / (2.0 * x + 1.0);
sign = -sign;
}
while(pi == 0.0){
// busy wait until pi is not 0.0
}
pi += sum;
return NULL;
}
int main(){
pthread_t threads[4];
int tids[4];
for(int i = 0; i < 4; i++){
tids[i] = i;
pthread_create(&threads[i], NULL, calculate_pi, &tids[i]);
}
for(int i = 0; i < 4; i++){
pthread_join(threads[i], NULL);
}
printf("Pi = %lf\n", pi * 4.0);
return 0;
}
```
程序的主要思路是将计算Pi的任务分为4个线程,每个线程计算一个四分之一的部分。线程使用忙等待等待其他线程完成计算,并将结果累加到全局变量pi中。主线程等待所有线程完成后,输出最终的Pi值。
在calculate_pi函数中,每个线程计算自己负责的部分,并将结果累加到pi变量中。由于所有线程都需要等待其他线程完成计算,因此在pi变量初始化为0.0时,线程会一直忙等待,直到pi变量被其他线程修改为非0值。
在主函数中,创建四个线程,并等待它们完成计算。最后输出计算出来的Pi值,这个值需要乘以4才是真正的Pi值。
需要注意的是,这个程序中使用的忙等待方法并不是最优的方法,因为它会浪费CPU资源。更好的方法是使用条件变量来实现线程间的同步。
阅读全文