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

Creating custom data type in c++

本文关键字:定义数据类型 创建 C++      更新时间:2023-10-16

>我正在编写一个程序来查找 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
}

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

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

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

  • powfactorial,你的算法所需的可以简单地实现为重复乘法;如果这不够快(以及像sqrtsin这样的函数,不能用基本运算精确表示),也可以使用其他算法。

听起来你想要一个bignum库。查看 GNU 多精度算术库,了解广泛使用的开源替代方案。

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