指数化のためのFLOP(浮動小数点演算)の数


7

べき乗(べき乗)を実行するために必要な浮動小数点演算の数はいくつですか?

1 FLOP、演算の数は、2つの浮動小数点数の乗算を使用すると仮定するためのになり。しかし、これを行うためのより速い方法はありますか?が整数でない場合、どのように機能しますか?バツ1

回答:


6

二つの数字一FLOP、操作の数を使用する間の乗算を想定するためのになり。しかし、これを行うためのより速い方法があります...バツ1

最も確実な方法は、負でない整数の累乗に対してこれを行うより速い方法です。たとえば、です。を計算するために1つの乗算が必要で、を計算するためにもう1つ、を計算するためにもう1つ、さらにこれら3つの数値を乗算するために2つ必要です。これは、単純なコストと単純なアルゴリズムを示唆しています。バツ14=バツ8バツ4バツ2バツ2バツ4バツ8

  • 非負の整数の累乗を基数2に変換します。
  • この表現の1の数を数えます。
  • この表現の最上位のゼロ以外のビットに対応する2の累乗を追加します。
  • 1を減算します。

これにより、負でない整数のべき乗に対して簡潔なアルゴリズムが得られます。このアルゴリズムは最も効率的で、最大です。このアルゴリズムは、ため、を計算するには6つの乗算が必要であることを示唆しています。しかし、15は、5回の乗算を計算するのに必要とされることを意味両方ともベース5におけるベース3における120および30である:ベースから3つの表現、および表現からの。計算するのに必要な乗算の最小数ここで負でない整数であり、実際にはNP完全問題バツ14バツ15バツ15=バツ8バツ4バツ2バツバツ15バツ15=バツ4バツバツ15=バツ5バツ。しかし、それは乗算よりもずっと少ないです。1

...そしてが整数でない場合、それはどのように機能しますか?

が有理の場合に使用できるいくつかのトリックがあります。しかし、が実数でが非負の実数の場合、近似手法を使用する必要があります。(たとえば、計算では、近似手法が2倍使用されます。)バツexplnバツ


NP-completeで必要な乗算の数を計算してよろしいですか?これは、NP中間体であると考えられている因数分解に依存する問題のようです。
stux

加算チェーンの複雑さに関するリファレンスはありますか?
Yuval Filmus

@stux:因数分解によって候補解が得られるからといって、すべての解が因数分解に基づいているとは限らない...
user21820

@ user21820:それは非常に真実なので、私の質問と言い回し。すべての解が因数分解によって駆動される場合、問題(おそらく)はNP完全ではありません。そうでない場合、提供されたリンクには、NP完全性を証明する参照が含まれていません。
stux

2
@stux-ダウニー、ピーター、ベントンレオン、ラビセティ。「加算チェーンを使用したシーケンスの計算。」SIAM Journal on Computing 10.3(1981):638-646。
David Hammen

5

n-1の乗算を使用するのはかなり手間がかかります。たとえば、n = 1024の場合、xを10乗するだけです。最悪のケースは2 * log_2(n)です。より速く行う方法の詳細については、Art of Computer ProgrammingのDonald Knuthを参照してください。n = 1023のように、xを10乗してx ^ 1024を求め、xで除算する場合があります。


ありがとう、なぜそれが
思いつか

4

あなたは式を使うことができます

バツy=expylnバツ

乗算のみを使用する場合は、 あなたが使用できる自然数である繰り返し二乗を、その用途Oログ乗算。他のために、乗算だけでは十分ではありません。


3

人々は何が起こるかをあなたに言いました 整数です。

そうでない場合については、浮動小数点のべき乗を行う方法さえまったく存在しない可能性があります。

これはTable-Maker's Dilemmaと呼ばれ、必要なメモリの量に制限がないことを示しています。

超越式を計算し、 いくつかの事前に割り当てられた桁数に正しく丸めるため、いくつの余分な桁を運ぶ必要があるかを予測する一般的な方法はありません 。
有限数の余分な数字が最終的に十分であるという事実(真の場合)でも、深い定理である可能性があります。


浮動小数点演算では、有限の入力セットがあるため、有限数の余分な数字で十分であることは明らかです。
gnasher729

@ gnasher729:ええ...私はこれをStackOverflowに投稿しなかったでしょうが、これがCS.SEにあるとすれば、質問の「floating-point」という単語を文字通りどのように解釈するのかわかりませんでした。「非整数」の同義語として使用された可能性は十分にあると思ったので、完全を期すために超越的なケースについて言及したいと思いました。
user541686

1
おそらくこれに密接に関連しているのは、一部の入力に対する以前のgcc数学ライブラリの実装のpow(x,y)(以前の)異常な速度低下です。それは、ULPの正確さのとらえどころのない半分を追い払うために非常に一生懸命に試みた(おそらく一生懸命に試した)。
David Hammen

0

問題に真剣に取り組んでいる場合は、乗算の数が最も少なく、実行時間が最も短いソリューションを見つけようとしない場合があります。

すべてのサイクルで乗算を開始できるが、各乗算には一定のサイクル数、たとえば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つしかありません。


最後の段落は誤りです。 バツ5バツ です バツ8ではなく バツ15。計算していますバツ15 少なくとも5つの乗算が必要です(または、4つの乗算で結果が得られます) バツ16、それに続く除算 バツ、しかしそれは5つの乗算よりも高価です)。
David Hammen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.