在c ++中创建自定义数据类型

时间:2011-05-08 16:00:00

标签: c++ class types

我正在编写一个程序来查找pi的值,并希望它显示超过标准的16位小数。 如何创建一个可以容纳16位小数以上的变量? 我目前的计划如下。 使用Dev-C ++:

#include<iostream.h>
#include<conio.h>
#include<math.h>

int factorial(int a)
{
    int b=1,c=1;
    for(c; c<=a; c++)
    {
        b=b*c;
    }
    return b;
}

int main()
{
    cout.precision(300);
    long int n,a;
    long double z=0,pi,num,den;
    for(n=0; n<1000000; n++)
    {      //begin for
        num=(pow(factorial(2*n),3))*((42*n)+5);
        den=(pow(factorial(n),6))*(pow(16,(3*n)+1));
        z=z+(num/den);

        pi=1/z;
        if(n%1==0)
        { 
            cout<<z<<endl; //test print statement
            cin>>a;
            cout<<pi;
            cout<<endl;
        }
    } 
    getch();
    return 0;      //end for
}

3 个答案:

答案 0 :(得分:2)

如果您不想使用现有的高精度算术库,那么这里有一些用于编写自己的算法库的指针。这将是一项相当多的工作(并且调试非常繁琐),但如果你有时间的话,这是一次很好的学习练习。

  • 将每个数字存储为较小“数字”的数组。对于一个非常简单(但效率低下)的实现,这些实际上可以是十进制数字,值为0到9 - 这将非常容易打印。为了更有效的实现,我可能会使用32位值作为“数字”。您还需要决定如何表示负数,数组是固定的还是可变的大小,以及(对于非整数),小数点是固定还是浮动。

  • 使用您在小学学到的算法实现基本算术:使用进位,借位减法,长乘和长除法。

  • 算法所需的
  • powfactorial可以简单地实现为重复乘法;如果速度不够快(以及sqrtsin等无法用基本操作完全表示的函数),则可以使用其他算法。

答案 1 :(得分:0)

听起来你想要一个bignum图书馆。查看the GNU Multiple Precision Arithmetic Library广泛使用的开源替代方案。

答案 2 :(得分:0)

您可以使用互联网上的一个bigint库,例如:https://mattmccutchen.net/bigint/