wxi*_*iir 13 c++ numbers biginteger arbitrary-precision
有人能告诉我一个好的C++库,用于处理(执行操作等等)任意大数(它可以是一个处理任意精度浮点数的库,但处理整数更重要)?
请只引用您使用的资料库,并告诉我你是怎么设法设置它,并把它捡起来,也许一个非常简约的例子或东西(基本上,如果提到图书馆没有良好的文档提供一些自己的输入).
为了记录,我在x64机器上使用Windows 7,CodeBlocks作为我的IDE,最新的MinGW作为编译器.
我试过的图书馆:
vlint(操作不够,但对于小东西工作正常)
bigint(易于设置,编译错误和文档不多(可能从中导出错误))
ttmath(看起来很有前途,编译了一些BIG示例程序,并且由于编译错误而导致一些修复后运行,因为几乎没有文档,所以语法难以理解)
gmp(甚至无法设置)
ps删除了"问题的咆哮部分",基本上解释了为什么我在Stackoverflow上问了很多次问题,所以人们会把它读到最后.
- >更新
所以我选一个答案,这不是直接回答我最初的问题,但对我帮助很大,解决这一点,我会发布一些我的调查结果,以帮助其他的C++新手跟我一样开始使用非常大的数字,工作没有挣扎几天的图书馆像我一样一步一步地进行微观指导.
我正在使用的东西(请记住遵循指南):
Windows 7旗舰版x64
Amd k10 x64(有些库不适用于此,其他库的行为会有所不同,其他库会自定义为amd k10,因此这不仅可以帮助您使用我使用的库,还可以帮助您使用其他库)
Code :: Blocks 10.05包含MinGW的版本,文件名"codeblocks-10.05-setup.exe"(安装在C:\ Program Files(x86)\ CodeBlocks上)
MinGW包(binutils-2.15.91-20040904-1.tar.gz gcc-core-3.4.2-20040916-1.tar.gz gcc-g ++ - 3.4.2-20040916-1.tar.gz mingw-runtime- 3.11.tar.gz w32api-3.8.tar.gz)在C:\ MinGW上提取
TTMath 0.9.2文件名"ttmath-0.9.2-src.tar.gz"解压缩并将文件夹"ttmath"复制到文件夹"C:\ CPPLibs"(这是我将我的c ++库放入的文件夹)
怎么做才能把它全部搞定
转到代码:Blocks> Settings> Compiler and Debugger(我的编译器在这里自动检测到.如果你没有这样做,请在"Selected Compiler"上选择"GNU GCC Compiler"并点击"Set as Default"然后点击"Toolchain" Exectables"on"编译器安装目录你可以选择编译器的安装目录或尝试自动检测"并在"C++编译器"上进行排序"选择或写入"mingw32-g ++.exe".如果发生这种情况,你只需要做在"Selected Compiler"中选择"GNU GCC Compiler"并单击"Set as Default").
在不离开"代码:块>设置>编译器和调试器"的情况下,按照上面的解决方法,转到"搜索目录",然后单击"添加",选择"存储库"或"放置"的位置. ttmath"文件夹(在我的情况下为C:\ CPPLibs)然后转到"链接器"并执行相同的操作.
首先,你必须把该行的"ttmath"编码库#include <ttmath/ttmath.h>的主要功能之前(注:如果您使用的是64位系统,你会得到很多的错误,如果你不还,就把这行#define TTMATH_DONT_USE_WCHAR 之前这条线#include <ttmath/ttmath.h>,我是挣扎着这个废话,直到我找到修复,其他一些也在挣扎的人发现并发布在网上,它对我有用)ps我认为这只适用于64位系统,但如果你确实因为包括"ttmath"而得到错误.h"头文件最有可能是因为这个.
声明变量,将有大的整数值,必须像这样进行:ttmath::UInt<n> a,b,c;其中,"A,B,C"是变量和"n"是,你可以在这种形式的变量存储的数字的大小"2 ^(32*n)对于32位系统为-1",对于64位系统,这种形式为"2 ^(64*n)-1"
分配给变量,如果你这样做a = 333;(和地方的333号比"长整型"标准数据上C++类型更大),因为规模的这样的独立分配给变量指定它不会编译早些时候整数可以和c ++上的"long int"标准数据类型一样大(我自己认为这是一个很难的方法),即使你使用的值更小并且编译得很好然后你运行你的程序,它会尝试写这个变量比提到的"长整型"标准数据类型可以处理数量更大的数量,那么你的数学将是错了,所以看这个:一个值分配给一个变量的权这样,你必须分配它像这样a = "333";(是的,我知道你几乎把它当作一个字符串这种方式,但它会做的作业只是没有任何问题很好,如果你决定要"COUT"变量它绝不会是一个指数或科学记数法结果,如你得到使用标准整数da ta类型没有与一些'额外的陈述'结合,以显示正确的数字)
ps使用这个简单的规则来处理整数和这个库我用15到20秒的简单程序(花了3分钟编写代码)来计算最多达到第100.000个数字的斐波那契数字,并且这个数字占用了3个页面,所以除了是一个实用的图书馆一旦你知道它是如何工作的(你以前几乎没有任何帮助,ttmath网站的一些样本很容易误导,但现在你确实有一些帮助)它看起来也非常有效,我确认了第100.000个数字可能是正确的,因为我将尺寸("n")从10000增加到50000,数字保留了大小,初始和最终数字相同.这是我使用的源代码,我使用了一个非常大的数字作为整数大小只是为了测试,我实际上并不打算看看程序会开始做什么,做错了但是我知道最长的长度第10.000个斐波纳契数不会超过我定义的长度,因为在此之前我将程序'cout'的每一个结果直到达到10.000并且它总是在增长.在我暂停程序之前,我还检查了序列的第一个数字,我看到'数字增长'并确认了序列的第一个斐波那契数,它们是正确的.注意:此源代码仅显示您想知道的斐波那契序列的数量,如果您取消注释注释行,它将仅显示"增长"的数字.
#define TTMATH_DONT_USE_WCHAR
#include <ttmath/ttmath.h>
#include <iostream>
using namespace std;
int main () {
int fibonaccinumber;
cin >> fibonaccinumber;
cin.ignore();
ttmath::UInt<10000> fibonacci1,fibonacci2,fibonacci3;
fibonacci1 = 1;
fibonacci2 = 1;
//cout << "1. " << fibonacci1 << "\n2. " << fibonacci2 << "\n";
for(int i=3;i<=fibonaccinumber;i++)
{fibonacci3 = fibonacci1 + fibonacci2;
// cout << i << ". " << fibonacci3 << "\n";
fibonacci1=fibonacci2;
fibonacci2=fibonacci3;}
cout << "the " << fibonaccinumber << "th fibonacci number is " << fibonacci2;
string endprog;
getline(cin,endprog);
return 0;}
Run Code Online (Sandbox Code Playgroud)
我没有修改这个lbrary的任意精确浮动但是当我这样做时,如果我看到人们对它感兴趣,我将继续扩展本指南,感谢所有的评论和答案.
| 归档时间: |
|
| 查看次数: |
3689 次 |
| 最近记录: |