2017-08-07 81 views
1

我試圖使用升壓boost/math/tools/fraction.hpp評價一個連分數,但是我甚至不能使升壓文檔工作(提供的源示例不編譯)提供的例子++續分數評價。c。使用升壓/數學

任何人都可以提供一個工作示例(例如升壓文檔中討論的golden_ratio例子將是巨大的)。關於這個特定主題的推廣文檔很少,或者至少對我來說不清楚,一個相對的C++新手。提前謝謝了。

+0

究竟是什麼樣的例子,你試圖編譯和錯誤信息是什麼? – user463035818

+0

謝謝。這是第一個沒有編譯的例子,但Adrien提供的答案解決了這個問題,現在問題已經解決了。 –

回答

2

以下snippest對我的作品:

#include <boost/math/tools/fraction.hpp> 
#include <iostream> 

using namespace std; 

template <class T> struct golden_ratio_fraction 
{ 
    typedef T result_type; 
    T operator()() { return 1.0; } 
}; 

int main(int, char**) 
{ 
    golden_ratio_fraction<double> frac; 

    double res = boost::math::tools::continued_fraction_a(
     frac, std::numeric_limits<double>::epsilon()); 

    cout << "Res : " << res << endl; 
    return 0; 
} 

有一個在升壓例如一個錯誤,他們寫道 T operator() { return 1.0; }而不是T operator()() { return 1.0; }

然後,要注意的是,你必須instanciat對象「壓裂」是很重要的。你不能寫:

double res = boost::math::tools::continued_fraction_a(
      golden_ratio_fraction<double>(), std::numeric_limits<double>::epsilon()) 

享受提振!

+0

非常感謝!你的片段也適用於我。我認爲很明顯我是一個新手,我沒有注意到這個例子中的錯誤。非常感謝您的快速回復。 –

+0

作爲一個後續行動,可以評估係數爲std的連續分數:: complex ?我無法讓它在這種特殊情況下工作,但模板對於標準類型(如float或double)可以正常工作。 –

+0

在boost文檔中,他們表示這適用於「算術類型或算術類型對」。當我們看到他們寫的實現時會這樣想:「while(fabs(delta - 1)> factor)」。所以這種類型的行不適用於std :: complex類型。 –