C++ 用浮点任意精度C++;图书馆,有成功的机会吗?

C++ 用浮点任意精度C++;图书馆,有成功的机会吗?,c++,floating-point,operator-overloading,arbitrary-precision,C++,Floating Point,Operator Overloading,Arbitrary Precision,假设我有这样一段代码: typedef double My_fp_t; My_fp_t my_fun( My_fp_t input ) { // some fp computation, it uses operator+, operator- and so on for type My_fp_t } My_fp_t input = 0.; My_fp_t output = my_fun( input ); 是否有可能用浮点任意精度C++库?< /P>来修改我的现有代码? 我想简单地添加#

假设我有这样一段代码:

typedef double My_fp_t;

My_fp_t my_fun( My_fp_t input )
{
// some fp computation, it uses operator+, operator- and so on for type My_fp_t
}

My_fp_t input = 0.;
My_fp_t output = my_fun( input );

是否有可能用浮点任意精度C++库?< /P>来修改我的现有代码? 我想简单地添加

#include
,将我的
类型定义更改为我的两倍进入
typedef任意\u double\t My\u fp\t并允许操作员重载C++执行其工作…< /P>
我的主要问题是,实际上我的代码没有
typedef
:-(因此,我的计划可能注定要失败


假设我的代码有typedef,我还会面临什么问题呢?

如果库定义的类型正确地重载了您使用的运算符,我看不到任何问题…

如果库定义的类型正确地重载了您使用的运算符,我看不到任何问题…

这可能很难。我使用了一个模板在我的代码中,ch确实处理不同的数值类型。您可能想看看它,看看我遇到的问题

问题是,如果你对数字所做的只是使用标准的算术运算符,你就可以了。但是,一旦你使用平方根或其他非运算符函数,你就需要创建辅助对象来检测对象的类型(在编译时,因为在运行时执行此操作太慢;请参阅boost元编程库以获取相关帮助),然后调用正确的函数并将其作为正确的类型返回。这是完全可行的,但可能需要的时间比您想象的要长,并且会大大增加代码的复杂性


根据我的经验,(我使用的是GMP,它一定是C++可用的最快的任意精度库)在我介绍了所有的努力和复杂性之后,我发现GMP对于我正在进行的各种计算来说太慢了;因此它在学术上很有趣,但实际上毫无用处。在开始之前,请进行一些速度测试,看看如果使用任意精度的算术,您的库是否仍然可用。

可能很难。我在代码中使用了一种模板方法来处理不同的数字类型。您可能想看看它,看看我遇到的问题

问题是,如果你对数字所做的只是使用标准的算术运算符,你就可以了。但是,一旦你使用平方根或其他非运算符函数,你就需要创建辅助对象来检测对象的类型(在编译时,因为在运行时执行此操作太慢;请参阅boost元编程库以获取相关帮助),然后调用正确的函数并将其作为正确的类型返回。这是完全可行的,但可能需要的时间比您想象的要长,并且会大大增加代码的复杂性


根据我的经验,(我使用的是GMP,它一定是C++可用的最快的任意精度库)在我介绍了所有的努力和复杂性之后,我发现GMP对于我正在进行的各种计算来说太慢了;因此它在学术上很有趣,但实际上毫无用处。在开始之前,请做一些速度测试,看看如果使用任意精度的算术,您的库是否仍然可用。

+1谢谢非常感谢你的回答。我没有考虑sqrt和其他函数,如sin、cos等。你对速度的评论也很有趣。+1非常感谢你的回答。我没有考虑sqrt和其他函数,如sin、cos等。你对速度的评论也很有趣。