回答:
二つの数字一FLOP、操作の数を使用する間の乗算を想定するためのになり。しかし、これを行うためのより速い方法があります...
最も確実な方法は、負でない整数の累乗に対してこれを行うより速い方法です。たとえば、です。を計算するために1つの乗算が必要で、を計算するためにもう1つ、を計算するためにもう1つ、さらにこれら3つの数値を乗算するために2つ必要です。これは、単純なコストと単純なアルゴリズムを示唆しています。
これにより、負でない整数のべき乗に対して簡潔なアルゴリズムが得られます。このアルゴリズムは最も効率的で、最大です。このアルゴリズムは、ため、を計算するには6つの乗算が必要であることを示唆しています。しかし、15は、5回の乗算を計算するのに必要とされることを意味両方ともベース5におけるベース3における120および30である:ベースから3つの表現、および表現からの。計算するのに必要な乗算の最小数ここで負でない整数であり、実際にはNP完全問題。しかし、それは乗算よりもずっと少ないです。
...そしてが整数でない場合、それはどのように機能しますか?
が有理の場合に使用できるいくつかのトリックがあります。しかし、が実数でが非負の実数の場合、近似手法を使用する必要があります。(たとえば、計算では、近似手法が2倍使用されます。)
n-1の乗算を使用するのはかなり手間がかかります。たとえば、n = 1024の場合、xを10乗するだけです。最悪のケースは2 * log_2(n)です。より速く行う方法の詳細については、Art of Computer ProgrammingのDonald Knuthを参照してください。n = 1023のように、xを10乗してx ^ 1024を求め、xで除算する場合があります。
人々は何が起こるかをあなたに言いました 整数です。
そうでない場合については、浮動小数点のべき乗を行う方法さえまったく存在しない可能性があります。
これはTable-Maker's Dilemmaと呼ばれ、必要なメモリの量に制限がないことを示しています。
超越式を計算し、 いくつかの事前に割り当てられた桁数に正しく丸めるために、いくつの余分な桁を運ぶ必要があるかを予測する一般的な方法はありません 。
有限数の余分な数字が最終的に十分であるという事実(真の場合)でも、深い定理である可能性があります。
pow(x,y)
(以前の)異常な速度低下です。それは、ULPの正確さのとらえどころのない半分を追い払うために非常に一生懸命に試みた(おそらく一生懸命に試した)。
問題に真剣に取り組んでいる場合は、乗算の数が最も少なく、実行時間が最も短いソリューションを見つけようとしない場合があります。
すべてのサイクルで乗算を開始できるが、各乗算には一定のサイクル数、たとえば3サイクルかかるモデルを考えてみます。kの乗算でx ^ nを計算するメソッドは3kサイクルかかる可能性があります(各乗算が直前に計算された結果に依存する場合)、より多くの乗算を使用するメソッドはより速く実行される可能性があります。
例:x ^ 15を計算するには、x ^ 2 = x * x、x ^ 3 =(x ^ 2)* x、x ^ 6 =(x ^ 3)^ 2、x ^ 7の順序で計算します= x ^ 6 * x、x ^ 14 =(x ^ 7)^ 2、x ^ 15 = x ^ 14 * x。6つの乗算ですが、それぞれ前のものに依存しています。
または、x ^ 2、x ^ 4 =(x ^ 2)^ 2、x ^ 3 = x ^ 2 * x、x ^ 5 =(x ^ 4)* x、x ^ 15 = x ^ 5 * xを計算します^ 3なので、以前の結果に応じて、乗算は4つしかありません。