题目:
这个程序的原理是这样的。假如有一个边长为1的正方形。以正方形的一个端点为圆心,以1为半径,画一个圆弧,于是在正方形内就有了一个直角扇形。在正方形里随机生成若干的点,则有些点是在扇形内,有些点是在扇形外。正方形的面积是1,扇形的面积是0.25*Pi。设点的数量一共是n,扇形内的点数量是nc,在点足够多足够密集的情况下,会近似有nc/n的比值约等于扇形面积与正方形面积的比值,也就是nc/n= 0.25*Pi/1,即Pi = 4*nc/n。
实现思路:
通过map读入文件,文件内容为投掷次数,暂时设定为100次,共10次。
然后map中,生成随机数,即x y点的坐标,计算点到(0,0)的距离,如果小于1加入到计数器in中,大于1则加入计数器out中,然后计算出pi值
reduce中,将求得的pi值再次进行求平均值。
代码如下
package Demo3;/** * @author 星际毁灭 * 使用算法随机生成xy的坐标 * */public class Pi { static int digit = 40; private int[] bases= new int[2]; private double[] baseDigit = new double[2]; private double[][] background = new double[2][digit]; private long index; Pi(int[] base) { bases = base.clone(); index = 0; for(int i=0; i
package Demo3;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.Reducer.Context;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import Demo1.WordCountTest;/** * @author 星际毁灭 * 求pi的值 * * */public class GetPoint { public static class Map extends Mapper