求圆周率算法1
#coding:utf-8
import random
import math
hits = 0
num = 1000000
for a in range(num):
x = random.random()*2 - 1
y = random.random()*2 - 1
if x*x + y*y < 1:
hits+=1.00
print "hits="+str(hits)
pi = hits/num*4
print pi
x = random.random()*2 -1
y = random.random()*2 -1
求圆周率算法2
x=2.00
num=10000
pi =2.00
pos = 1.0
i = num
while i > 0:
pi = pi * i/(2*i+1) + 2
i=i-1
print pi
开方算法1
#include <stdio.h>
#include <math.h>
float InvSqrt(float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f375a86-(i>>1);
x=*(float*)&i;
x = x*(1.5f-xhalf*x*x);
return x;
}
int main()
{
printf("%lf",1/InvSqrt(9));
return 0;
}
开方算法2
# encoding: utf-8
import math
import time
#牛顿迭代法
def sqrt(x):
if x<0:
print "0不能开方"
t = 0
old =x+1.0
new =float(x)
while abs(old-new) > 0.000001:
print new
old = new
new = (x/new+ new)/2
t+=1
print "t="+str(t)
return new
#二分开方法
def sqrt1(x):
t = 0
low = 0.0
mid = (low+float(x))/2
high = x
while abs(mid*mid-x)>0.0001:
print mid
if mid*mid > x:
high = mid
else:
low = mid
mid = (low+high)/2
print "low="+str(low) +" high="+str(high)
t+=1
print "t="+str(t)
return mid
print sqrt(9)
print sqrt1(9)
积分算法
#include<stdio.h>
double fn(double x)
{
return x*x;
}
int main()
{
float a=0.0,b=1.0;
int n = 1000000;
double blk = (b-a)/n;
printf("%lf\n",blk);
float i;
double area=0.0;
double x1,x2;
for(i=0.0;i<n;i++){
x1 = i/n;
x2 = (i+1)/n;
area+=blk*(fn(x1)+fn(x2))/2;
}
printf("%lf\n",area);
return 0;
}