0

假设我有一段这样的代码:

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++ 库来改造我现有的代码?

我想简单地 add #include <cpp_arbitrary_precision_fp>,改变我的typedef double My_fp_t;intotypedef arbitrary_double_t My_fp_t;并让 C++ 的运算符重载完成它的工作......

我的主要问题是实际上我的代码没有typedef:-(所以也许我的计划注定要失败。

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

4

2 回答 2

2

这可能很难。我在我的博士论文代码中使用了模板方法来处理不同的数字类型。您可能想看看它以了解我遇到的问题。

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

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

于 2011-05-19T13:24:24.073 回答
1

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

于 2011-05-19T13:10:03.087 回答