在最近回答涉及阿克曼函數的問題後,其中一部分涉及用於計算數字係數的函數。這讓我深思,是否有更有效的方法來做到這一點。我自己做了一些測試,但主要受限於5^3 = 5^3125這樣的數字大概是10^2,這意味着5^3125 = 10 ^(3125 * 2/3)約2000位數字。有沒有一個有效的tetration實施?
該函數不借給本身分而治之由於冪是如何完成的性質的方法,即:
2 ^^ 5 = 2 ^(2 ^(2 ^(2^2 ))))= 2 ^(2 ^(2^4))= 2 ^(2^16)= 2^65536 = = 10 ^(65536 * 3/10)因此大約20k位...
問題的本質,因爲它從電源樹的頂端開始,並且降低了我的工作量,因此我覺得它是階乘因素。一個快速的功率算法可以用來明顯地進行冪運算,但是我一直無法找到縮小指數運算次數的方法。
在任何情況下,目前還不清楚我談論這裏的wiki article,本質上不過是迭代冪次:
一個^^ B = A^A^A^...... A,B三次,然後開始在電源樹的頂端元素上取冪,然後繼續工作。
目前我使用的是(雖然我使用的紅寶石版本,如果我實際上希望值)的算法:
long int Tetration(int number, int tetrate)
{
long int product=1;
if(tetrate==0)
return product;
product=number;
while(tetrate>1)
{
product=FastPower(number,product);
tetrate--;
}
return product;
}
任何想法,將不勝感激。
我認爲很多取決於你需要什麼樣的數字表示。你需要精確的整數表示嗎?或者是近似數值(浮點)表示是否足夠? – RBarryYoung 2009-06-08 06:52:26
出於好奇,這純粹是一個問題,所以我會好奇你怎麼才能用浮點表示法編寫更高效的算法。 – JSchlather 2009-06-08 14:48:40
我確實研究過這個,但很快就意識到整數數字長度問題(Dave下面解釋)也會折磨任何tetration函數輸出的指數,只是在一個遞歸更少的情況下。基本上,浮點可以處理指數乘積,因爲它是LOG格式的表示。國際海事組織,爲了有效地處理tetration產品,你需要開發一個基於超級日誌的格式。這聽起來很難但很有趣,甚至可能是有價值的論文(無論如何)。 – RBarryYoung 2009-06-13 00:40:36