一些数学算法

求圆周率算法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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值