I am trying to write a program that allows for pi to be gernated to the 300th digit, but I cannot seem to figure out how to cut it off at the 300th digit.
As of right now the code was ran forever and any other method I have tried has not worked like cutting off at a specfiec time, however this is not what I need to happen.
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
class Gospers
{
cpp_int q, r, t, i, n;
public:
// use Gibbons spigot algorith based on the Gospers series
Gospers() : q{1}, r{0}, t{1}, i{1}
{
*this; // move to the first digit
}
// the prefix operator will move to the next digit
Gospers& operator ()
{
n = (q*(27*i-12) 5*r) / (5*t);
while(n != (q*(675*i-216) 125*r)/(125*t))
{
r = 3*(3*i 1)*(3*i 2)*((5*i-2)*q r);
q = i*(2*i-1)*q;
t = 3*(3*i 1)*(3*i 2)*t;
i ;
n = (q*(27*i-12) 5*r) / (5*t);
}
q = 10*q;
r = 10*r-10*n*t;
return *this;
}
// the dereference operator will give the current digit
int operator*()
{
return (int)n;
}
};
int main()
{
Gospers g;
std::cout << *g << "."; // print the first digit and the decimal point
for(300;) // run forever
{
std::cout << * g; // increment to the next digit and print
}
}
CodePudding user response:
You are stating that you generating 300 digits, however this for-loop is broken:
for(300;)
It is not valid C code, as a for-loop is structured like this:
for ( declaration ; expression ; increment)
While all 3 segments are optional, you do need at least two semicolons (;
) for a valid syntax.
To achieve a for loop that repeats a sequence 300 times you would need a for loop-like this:
for (int i = 0; i < 300; i)