MATLAB Answers

How can I get more than 49 digits of pi in a string?

16 views (last 30 days)
India Moore
India Moore on 25 Dec 2019
Edited: David Goodmanson on 26 Dec 2019
nums = num2str(pi,x);
Returns only 49 digits when x is greater than 49. How can I get it to return more digits?

  0 Comments

Sign in to comment.

Answers (3)

John D'Errico
John D'Errico on 25 Dec 2019
Edited: John D'Errico on 25 Dec 2019
You could always download my HPF toolbox from the file exchange. It will provide 500100 digits of pi.
P = hpf('pi',500000);
cp = disp(P);
numel(cp)
ans =
500001
cp(1:1001)
ans =
'3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198'
So 1000 digits of pi, plus a decimal point.
As I recall, I even computed those digits using HPF itself just to test the tool, and verify it was working correctly. I'm not sure which series I used, but there are many good ones out there if you look carefully. You do need to be working with a tool that can handle high precision arithmetic. A double will not suffice.
Be careful with the last digit reported to make sure it was not rounded. For example, if you do this:
vpa(sym('pi'),1000)
the last 10 digits reported are ...9216420199
However, the true digits of pi in that vicinity run as: ...9216420198938095...
So the last digit reported by vpa is actually rounded up to a 9.

  0 Comments

Sign in to comment.


David Goodmanson
David Goodmanson on 25 Dec 2019
Edited: David Goodmanson on 26 Dec 2019
Hi India,
vpa(pi,100) for example (although you need the symbolic toolbox for vpa)
And see Walter's comment below. The answer here is all right, but only by luck.

  1 Comment

Walter Roberson
Walter Roberson on 26 Dec 2019
vpa(sym('pi'), 100)
is more robust. The symbolic conversion that is done does recognize the numeric approximation given by the function pi and specially converts it to the symbolic Pi. The conversion is also able to recognize some simple fractions of pi such as pi/3. However it is better not to count on the symbolic engine recognizing the numeric approximation and to code symbolic pi when symbolic pi is needed. People who do not know the symbolic toolbox well can easily be misled into thinking that pi appearing in code refers to the transcendental value rather than to the numeric approximation, and then they get confused as to why cos(pi) is not exactly 0.

Sign in to comment.


David Hill
David Hill on 25 Dec 2019
Edited: David Hill on 25 Dec 2019
You could just make your own symbolic Pi.
digits 1000;
Pi=sym('3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989');

  0 Comments

Sign in to comment.

Sign in to answer this question.

Tags


Translated by