0

讓說我有這樣的代碼片段:使用浮點任意精度C++庫改裝現有代碼,任何成功的機會?

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++庫中的現有代碼?

我想簡單的添加#include <cpp_arbitrary_precision_fp>,改變我的typedef double My_fp_t;typedef arbitrary_double_t My_fp_t;而讓C++做的工作的操作符重載...

我的主要問題是,其實我的代碼不具備的typedef :-(所以也許我的計劃是註定要失敗的。

假設我的代碼有typedef的,我會面臨什麼其他問題?

回答

2

這可能很難。我在我的PhD thesis代碼中使用了一種模板方法來處理不同的數字類型。你可能想看看它,看看我遇到的問題。

事情是你很好,如果你對你的號碼所做的是使用標準算術運算符。但是,只要使用平方根或其他非運算符函數,就需要創建幫助對象來檢測對象的類型(在編譯時,因爲它在運行時執行速度太慢;請參閱boost元編程庫以獲取幫助),然後調用正確的函數並將其作爲正確的類型返回。這完全是可行的,但可能需要比您想象的更長的時間,並會大大增加代碼的複雜性。根據我的經驗,(我使用的GMP必須是C++中最快的任意精度庫)經過我所介紹的所有努力和複雜性之後,我發現GMP對於計算類型來說太慢了,我在做;所以它在學術上很有趣,但實際上沒有用。在你開始之前,先做一些速度測試,看看你的庫是否仍然可用,如果你使用任意的精度算術。

+0

+1非常感謝您的回答。我沒有考慮sqrt和sin,cos等其他函數。您對速度的評論也很有趣。 – 2011-05-19 13:46:00

+0

我的榮幸。樂意效勞。 – briantyler 2011-05-19 18:32:43

1

如果庫定義一個類型,正確重載使用運營商,我不沒有看到任何問題...