在 C++ 中创建自定义数据类型
Creating custom data type in c++
>我正在编写一个程序来查找 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 位值作为"数字"。您还需要决定如何表示负数,数组应该是固定的还是可变大小的,以及(用于处理非整数)小数点应该是固定的还是浮点的。
-
使用您在小学学习的算法实现基本算术:加法与进位,减法与借用,长乘法和长除法。
-
pow
和factorial
,你的算法所需的可以简单地实现为重复乘法;如果这不够快(以及像sqrt
和sin
这样的函数,不能用基本运算精确表示),也可以使用其他算法。
听起来你想要一个bignum库。查看 GNU 多精度算术库,了解广泛使用的开源替代方案。
您可以使用互联网上的bigint库之一,例如:https://mattmccutchen.net/bigint/
相关文章:
- 错误 - 自定义数据类型作为有效负载,带有提升::几何
- C++哈希表 - 如何解决自定义数据类型作为键的unordered_map冲突?
- 从自定义数据类型向量中删除重复元素
- C++:自定义数据类型向量错误的队列
- 交换未定义数据类型中的字节顺序
- 在 C++ 中设置的用户定义数据类型
- C++ - 按自定义数据类型向量的值删除元素
- 使用算法标头查找自定义数据类型的minmax
- 如何将自定义数据类型(用std::对填充的std::数组)写入文件流
- 从自定义数据类型向量数组C 删除
- 模板函数实例化 自定义数据类型的问题
- 我可以让我自己的自定义数据类型比C++中的数据类型大吗
- 如何在Swig中为非基元数据类型创建包装器
- 使用QStandardItem传输自定义数据(类型*)时内存泄漏
- C++中的"auto"是否可以识别自定义数据类型?
- 从自定义数据类型列表中删除时出现 C2678 错误
- 用于查询自定义数据类型列表的SQLite虚拟表
- 使用Rocksdb存储自定义数据类型
- 如何从套接字读取接收自定义数据类型
- 在 C++ 中创建自定义数据类型