Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
118
rated 0 times [  121] [ 3]  / answers: 1 / hits: 17271  / 9 Years ago, wed, june 10, 2015, 12:00:00

Is there a way to calculate pi in Javascript? I know there you can use Math.PI to find pie like this:



var pie = Math.PI;
alert(pie); // output 3.141592653589793


but this is not accurate. What I want is to be able to calculate it, to have as many digits as you want, not anything like pie = 3.141592.... But still, what I want is not have just have some more digits, but as much as you can (like having one thousand digits, but I need more).


More From » math

 Answers
9

I found this code on this website:




mess = ;
Base = Math.pow(10, 11);
cellSize = Math.floor(Math.log(Base) / Math.LN10);
a = Number.MAX_VALUE;
MaxDiv = Math.floor(Math.sqrt(a));

function makeArray(n, aX, Integer) {
var i = 0;
for (i = 1; i < n; i++) aX[i] = null;
aX[0] = Integer
}

function isEmpty(aX) {
var empty = true
for (i = 0; i < aX.length; i++)
if (aX[i]) {
empty = false;
break
}
return empty
}

function Add(n, aX, aY) {
carry = 0
for (i = n - 1; i >= 0; i--) {
aX[i] += Number(aY[i]) + Number(carry);
if (aX[i] < Base) carry = 0;
else {
carry = 1;
aX[i] = Number(aX[i]) - Number(Base)
}
}
}

function Sub(n, aX, aY) {
for (i = n - 1; i >= 0; i--) {
aX[i] -= aY[i];
if (aX[i] < 0) {
if (i > 0) {
aX[i] += Base;
aX[i - 1]--
}
}
}
}

function Mul(n, aX, iMult) {
carry = 0;
for (i = n - 1; i >= 0; i--) {
prod = (aX[i]) * iMult;
prod += carry;
if (prod >= Base) {
carry = Math.floor(prod / Base);
prod -= (carry * Base)
} else carry = 0;
aX[i] = prod
}
}

function Div(n, aX, iDiv, aY) {
carry = 0;
for (i = 0; i < n; i++) {
currVal = Number(aX[i]) + Number(carry * Base);
theDiv = Math.floor(currVal / iDiv);
carry = currVal - theDiv * iDiv;
aY[i] = theDiv
}
}

function arctan(iAng, n, aX) {
iAng_squared = iAng * iAng;
k = 3;
sign = 0;
makeArray(n, aX, 0);
makeArray(n, aAngle, 1);
Div(n, aAngle, iAng, aAngle);
Add(n, aX, aAngle);
while (!isEmpty(aAngle)) {
Div(n, aAngle, iAng_squared, aAngle);
Div(n, aAngle, k, aDivK);
if (sign) Add(n, aX, aDivK);
else Sub(n, aX, aDivK);
k += 2;
sign = 1 - sign
}
mess += aArctan= + aArctan + <br>
}

function calcPI(numDec) {
var ans = ;
t1 = new Date();
numDec = Number(numDec) + 5;
iAng = new Array(10);
coeff = new Array(10);
arrayLength = Math.ceil(1 + numDec / cellSize);
aPI = new Array(arrayLength);
aArctan = new Array(arrayLength);
aAngle = new Array(arrayLength);
aDivK = new Array(arrayLength);
coeff[0] = 4;
coeff[1] = -1;
coeff[2] = 0;
iAng[0] = 5;
iAng[1] = 239;
iAng[2] = 0;
makeArray(arrayLength, aPI, 0);
makeArray(arrayLength, aAngle, 0);
makeArray(arrayLength, aDivK, 0);
for (var i = 0; coeff[i] != 0; i++) {
arctan(iAng[i], arrayLength, aArctan);
Mul(arrayLength, aArctan, Math.abs(coeff[i]));
if (coeff[i] > 0) Add(arrayLength, aPI, aArctan);
else Sub(arrayLength, aPI, aArctan)
}
Mul(arrayLength, aPI, 4);
sPI = ;
tempPI = ;
for (i = 0; i < aPI.length; i++) {
aPI[i] = String(aPI[i]);
if (aPI[i].length < cellSize && i != 0) {
while (aPI[i].length < cellSize) aPI[i] = 0 + aPI[i]
}
tempPI += aPI[i]
}
for (i = 0; i <= numDec; i++) {
if (i == 0) sPI += tempPI.charAt(i) + .<br>;
else {
if (document.getElementById(cbCount).checked) addcount = ( + (i) + );
else addcount = ;
if (document.getElementById(cbSpace).checked) thespace = ;
else thespace = ;
if ((i) % 50 == 0 && i != 0) sPI += tempPI.charAt(i) + addcount + <br>;
else if (i % 5 == 0) sPI += tempPI.charAt(i) + thespace;
else sPI += tempPI.charAt(i)
}
}
ans += (PI ( + numDec + )= + sPI + <br>);
ans += (Win PI=<br>3.1415926535897932384626433832795<br>);
t2 = new Date();
timeTaken = (t2.getTime() - t1.getTime()) / 1000;
ans += It took: + timeTaken + seconds;
var myDiv = document.getElementById(d1);
myDiv.innerHTML = ans
}

<form name= onsubmit=calcPI(this.t1.value);return false;>
Number of Digits:<br>
<input type=text name=t1 id=t1 value=100 size=25 maxlength=25>
<br>Add Count:
<input type=checkbox name=cbCount id=cbCount value= checked=checked>
<br>Add Spaces:
<input type=checkbox name=cbSpace id=cbSpace value= checked=checked>
<br>
<input type=button value=Calculate Pi onclick=calcPI(this.form.t1.value)>
</form>
<div id=d1></div>




[#66261] Monday, June 8, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
samaraanandah

Total Points: 94
Total Questions: 86
Total Answers: 99

Location: Montenegro
Member since Thu, Jun 16, 2022
2 Years ago
samaraanandah questions
Thu, Nov 17, 22, 00:00, 2 Years ago
Mon, Jul 13, 20, 00:00, 4 Years ago
Fri, Jul 3, 20, 00:00, 4 Years ago
Thu, Aug 29, 19, 00:00, 5 Years ago
Thu, May 9, 19, 00:00, 5 Years ago
;