2012-09-18 33 views
4

當我使用C#中的Math.Pow(double x,double y)或C++中的math.h pow-function這些函數函數時,它們是否會在一段時間內運行?電源功能是否在恆定時間內運行?

我問的原因是因爲我想知道形式(1-t)^ n * p0 + ... + t ^(n)* pN上的「預先計算的」bézier函數是否可以運行線性時間,然後可以比實施De Casteljaus算法以控制點和t爲參數更快。

+0

你可以找到在此線程一些優秀的信息: http://stackoverflow.com/questions/5231096/time-complexity-of-power – Dan

回答

2

我認爲這些方法使用基於迭代的處理來獲得結果,並且僅當兩次迭代的值之間的差異落在給定的誤差常數下時才停止。

有很多迭代方法可以非常快速地收斂到電源操作的結果......所以我認爲它們接近恆定時間。

這個問題有很多偉大的解釋: How is Math.Pow() implemented in .NET Framework?

編輯

我發現很多好的材質的在http://math.stackexchange.com一起工作。

這是一個非常有趣的,因爲它解釋了使用人類語言計算冪的方法:

思考

我不是數學天才,但據我所看到的,所花費的時間不會對你選擇的值取決於很多,但是你想要的精確數字的數量。我想說的是,這取決於論據,但有一個最大值。另外,爲了支持這個理論,看看這個算法(由Sun實現):http://pastebin.com/LDjS5mAR。沒有循環,只有ifs。我認爲這是因爲實現它的人選擇了他們想要的固定精度,然後擴展了所需的所有迭代以保證精度。

例如,迭代的不變數量的環可以easyly擴大這樣的:

for (int it = 0; it < 5; it++) 
    a *= a; 

是一樣的:

a *= a; a *= a; a *= a; a *= a; a *= a; 
+0

啊啊謝謝,這是一個非常好的鏈接!好東西!你有沒有提到所提到的快速迭代方法?他們的速度取決於力量嗎? –

+0

我無法找到它實施的具體方式......他們說這是從英特爾購買的。我會嘗試找到關於迭代功耗方法的一些信息,並將其發佈到此處。 –

+0

現在還沒有看到編輯,但非常好的附加信息! –