Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using BigNum;
- namespace pi
- {
- public class ExpressionSample
- {
- public static BigFloat ergebniss1;
- public static BigFloat ergebniss2;
- public static BigFloat ergebniss3;
- public static BigFloat ergebniss4;
- public static BigFloat ergebniss5;
- public static BigFloat ergebniss6;
- public static BigFloat ergebniss7;
- public static BigFloat ergebniss8;
- public static BigFloat ergebniss9;
- public static BigFloat ergebniss10;
- public static BigFloat ergebniss11;
- public static BigFloat ergebniss12;
- public static BigFloat ergebniss13;
- public static BigFloat ergebniss14;
- public static BigFloat ergebniss15;
- public static BigFloat ergebniss16;
- public static void Main(String[] args)
- {
- PrecisionSpec Precision = new PrecisionSpec(10*2*System.Environment.ProcessorCount, PrecisionSpec.BaseType.BIN);//2048 is das limit
- Console.WriteLine("Stellen?");
- int schleifen = Convert.ToInt32( Console.ReadLine());
- int start = 0;
- Console.WriteLine(start + "");
- Thread t1 = new Thread(PI);
- Thread t2 = new Thread(PI);
- Thread t3 = new Thread(PI);
- Thread t4 = new Thread(PI);
- Thread t5 = new Thread(PI);
- Thread t6 = new Thread(PI);
- Thread t7 = new Thread(PI);
- Thread t8 = new Thread(PI);
- Thread t9 = new Thread(PI);
- Thread t10 = new Thread(PI);
- Thread t11 = new Thread(PI);
- Thread t12 = new Thread(PI);
- Thread t13 = new Thread(PI);
- Thread t14 = new Thread(PI);
- Thread t15 = new Thread(PI);
- Thread t16 = new Thread(PI);
- t1.Name = "t1";
- t2.Name = "t2";
- t3.Name = "t3";
- t4.Name = "t4";
- t5.Name = "t5";
- t6.Name = "t6";
- t7.Name = "t7";
- t8.Name = "t8";
- t9.Name = "t9";
- t10.Name = "t10";
- t11.Name = "t11";
- t12.Name = "t12";
- t13.Name = "t13";
- t14.Name = "t14";
- t15.Name = "t15";
- t16.Name = "t16";
- switch (Environment.ProcessorCount)
- {
- case 1:
- t1.Start(start);
- break;
- case 2:
- t1.Start(start);
- t1.Join();
- t2.Start(start);
- break;
- case 4:
- t1.Start(start);
- t2.Start(start);
- t3.Start(start);
- t4.Start(start);
- break;
- case 3:
- t1.Start(start);
- t2.Start(start);
- t3.Start(start);
- break;
- case 6:
- t1.Start(start);
- t2.Start(start);
- t3.Start(start);
- t4.Start(start);
- t5.Start(start);
- t6.Start(start);
- break;
- case 8:
- t1.Start(start);
- t2.Start(start);
- t3.Start(start);
- t4.Start(start);
- t5.Start(start);
- t6.Start(start);
- t7.Start(start);
- t8.Start(start);
- break;
- default:
- case 16:
- t1.Start(start);
- t2.Start(start);
- t3.Start(start);
- t4.Start(start);
- t5.Start(start);
- t6.Start(start);
- t7.Start(start);
- t8.Start(start);
- t9.Start(start);
- t10.Start(start);
- t11.Start(start);
- t12.Start(start);
- t13.Start(start);
- t14.Start(start);
- t15.Start(start);
- t16.Start(start);
- break;
- }
- Console.ReadLine();
- //PI(start);
- }
- public static void PI(object o)
- {
- int core=0;
- switch (Thread.CurrentThread.Name)
- {
- case "t1": core = 0; break;
- case "t2": core = 1; break;
- case "t3": core = 2; break;
- case "t4": core = 3; break;
- case "t5": core = 4; break;
- case "t6": core = 5; break;
- case "t7": core = 6; break;
- case "t8": core = 7; break;
- case "t9": core = 8; break;
- case "t10": core = 9; break;
- case "t11": core = 10; break;
- case "t12": core = 11; break;
- case "t13": core = 12; break;
- case "t14": core = 13; break;
- case "t15": core = 14; break;
- case "t16": core = 15; break;
- }
- int start = (int)o;
- PrecisionSpec Precision = new PrecisionSpec(1000000, PrecisionSpec.BaseType.BIN);//2048 is das limit
- PrecisionSpec Precision1 = new PrecisionSpec(2+1, PrecisionSpec.BaseType.BIN);// denk mal weiter!!!!
- BigFloat pi = new BigFloat(Precision1);
- pi.IsZero();
- //BigFloat eins_f = new BigFloat(1, Precision);
- //BigFloat zwei_f = new BigFloat(2, Precision);
- //BigInt drei = new BigInt(3, Precision);
- BigInt i = new BigInt((10*start)+core, Precision);
- //double zwischenergebniss=0;
- BigInt ende = new BigInt(10, Precision);
- Precision = new PrecisionSpec(2, PrecisionSpec.BaseType.BIN);//2048 is das limit
- int j = (10 * start) + core;
- BigInt add = new BigInt(System.Environment.ProcessorCount, Precision);
- for (i.IsZero(); i.LessThan(ende); i=i+add)
- {
- j=j+System.Environment.ProcessorCount;
- BigFloat i_f = new BigFloat(i, Precision);
- // double eins=((System.Math.Pow(-1,i))/(System.Math.Pow(4,i)));
- // BigFloat eins = new BigFloat(1,Precision);
- BigInt minuseins = new BigInt(-1, Precision);
- BigInt vier = new BigInt(4, Precision);
- BigInt nulle = new BigInt(0, Precision);
- BigInt summe1 = new BigInt(1, Precision);
- BigInt summe2 = new BigInt(2, Precision);
- BigInt summe3 = new BigInt(3, Precision);
- vier.Power(i);
- minuseins.Power(i);
- if (i.Equals(nulle))
- {
- nulle++;
- minuseins.Assign(nulle);
- }
- BigFloat zwischen1 = new BigFloat(vier, Precision);
- BigFloat zwischen2 = new BigFloat(minuseins, Precision);
- zwischen2.Div(zwischen1);//Teil 1
- vier = new BigInt(4, Precision);
- vier.Mul(i);
- summe1.Add(vier);
- summe2.Add(vier);
- summe3.Add(vier);
- zwischen1 = new BigFloat(2, Precision);
- BigFloat zwischen3 = new BigFloat(2, Precision);
- BigFloat zwischen4 = new BigFloat(1, Precision);
- BigFloat zwischen5 = new BigFloat(summe1, Precision);//summe1
- BigFloat zwischen6 = new BigFloat(summe2, Precision);//summe2
- BigFloat zwischen7 = new BigFloat(summe3, Precision);//summe3
- zwischen1.Div(zwischen5);// teil 2
- zwischen3.Div(zwischen6);// teil 3
- zwischen4.Div(zwischen7);// teil 4
- zwischen1.Add(zwischen3);//fehler fehler fehler fehler fehler ferhler ferhler
- zwischen1.Add(zwischen4);//gesamtsumme
- //Console.WriteLine(zwischen2.ToString());
- zwischen2.Mul(zwischen1);//produkt
- Console.WriteLine(i.ToString());
- zwischen2.Add(pi);
- //Console.WriteLine(zwischen2.ToString());
- pi = new BigFloat(zwischen2, Precision1);
- Precision = new PrecisionSpec(((j + 2) * 2), PrecisionSpec.BaseType.BIN);
- Precision1 = new PrecisionSpec(((j + 2) * 2) + 1, PrecisionSpec.BaseType.BIN);
- //pi.Assign(zwischen2);//PI
- //pi = new BigFloat(pi, Precision1);
- //Console.WriteLine("");
- //Console.WriteLine(pi.ToString());
- //Console.WriteLine("");
- //Console.WriteLine("");
- }
- switch (Thread.CurrentThread.Name)
- {
- case "t1":
- ergebniss1= new BigFloat(0, Precision1);
- ergebniss1.Assign(pi);
- break;
- case "t2":
- ergebniss2= new BigFloat(0, Precision1);
- ergebniss2.Assign(pi);
- break;
- case "t3":
- ergebniss3= new BigFloat(0, Precision1);
- ergebniss3.Assign(pi);
- break;
- case "t4":
- ergebniss4= new BigFloat(0, Precision1);
- ergebniss4.Assign(pi);
- break;
- case "t5":
- ergebniss5= new BigFloat(0, Precision1);
- ergebniss5.Assign(pi);
- break;
- case "t6":
- ergebniss6= new BigFloat(0, Precision1);
- ergebniss6.Assign(pi);
- break;
- case "t7":
- ergebniss7= new BigFloat(0, Precision1);
- ergebniss7.Assign(pi);
- break;
- case "t8":
- ergebniss8= new BigFloat(0, Precision1);
- ergebniss8.Assign(pi);
- break;
- case "t9":
- ergebniss9= new BigFloat(0, Precision1);
- ergebniss9.Assign(pi);
- break;
- case "t10":
- ergebniss10= new BigFloat(0, Precision1);
- ergebniss10.Assign(pi);
- break;
- case "t11":
- ergebniss11= new BigFloat(0, Precision1);
- ergebniss11.Assign(pi);
- break;
- case "t12":
- ergebniss12= new BigFloat(0, Precision1);
- ergebniss12.Assign(pi);
- break;
- case "t13":
- ergebniss13= new BigFloat(0, Precision1);
- ergebniss13.Assign(pi);
- break;
- case "t14":
- ergebniss14= new BigFloat(0, Precision1);
- ergebniss14.Assign(pi);
- break;
- case "t15":
- ergebniss15= new BigFloat(0, Precision1);
- ergebniss15.Assign(pi);
- break;
- case "t16":
- ergebniss16= new BigFloat(0, Precision1);
- ergebniss16.Assign(pi);
- break;
- }
- Console.WriteLine("Thread " + core + " fertig");
- ////return pi;
- //Console.WriteLine("");
- //Console.WriteLine("================================================================================");
- //Console.WriteLine("Pi ist ungefähr:");
- //Console.WriteLine("");
- //Console.WriteLine(pi);
- //Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement