• ベストアンサー

浮動小数点 を整数に変えて計算する方法

floating point (浮動小数点)を integer (整数)(fixed point(固定小数点)?)にかえて計算する方法を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

浮動小数点を固定小数点に直すのは簡単です。 IEEE754形式を仮定すると、 符号を s 指数部の値を e 仮数部の値を m mに1.0を足した固定小数点を mx とします。 eが127 なら、mxはそのままの固定小数点を示します。 eが127以下なら、127 - e だけ、mx を右シフトします。 eが127以上なら、e - 127だけ、mxを左シフトします。 最後に、sが1ならば(負の数ならば)、シフトしたmxの補数をとって終了です。 あとは固定小数点同士の演算を適用できます。 IEEE754について http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0#IEEE.E6.96.B9.E5.BC.8F.EF.BC.88IEEE_754_.E5.BD.A2.E5.BC.8F.EF.BC.89 違った浮動小数点形式でも基本的にはシフトして補数をとる作業で固定小数点となります。

その他の回答 (2)

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.3

IEEE の浮動小数点形式がどのようなビット配置に なっているかは、数学カテゴリーでは場違いです。 その部分が知りたいのであれば、 適正なカテゴリーで質問してください。 ここでは、整数演算を使って浮動小数点演算が どのように実現できるのかを説明してみましょう。 浮動小数点形式とは、有限小数を表記する際に、 小数点の位置を有効桁の最上位に固定して、 x・B^n のように書く記法のことです。 B は B 進法の底。算数や実験科学では B = 10、 コンピュータでは B = 2 を使うことが多いようです。 x が 0 ≦ x < 1 の範囲になるように n を選び、 x を仮数部、n を指数部と呼びます。 仮数部の中で小数点が左端に固定されていることが、 固定小数点形式とは異なる、浮動小数点形式の特徴です。 さて、これを整数演算で計算するためには、まづ、 仮数部を整数で表さなくてはなりません。 そのために、小数点が有効桁の右端に移るように、 x・B^n = (x・B^k)・B^(n-k) と桁をずらします。 k を十分大きくとれば、ニセ仮数部 (x・B^k) が整数になります。 この桁をずらしたニセ浮動小数点形式どうしで、 X・B^N + Y・B^N = (X+Y)・B^N X・B^N - Y・B^N = (X-Y)・B^N X・B^N × Y・B^M = (XY)・B^(N+M) X・B^N ÷ Y・B^M = (X/Y)・B^(N-M) のように計算するのです。 足し算引き算では N が同じになっている必要があるので、 最初にニセ浮動小数点形式に変えるときに考慮しておきます。 各右辺に現われる計算 X+Y, X-Y, XY, X/Y, N+M, N-M は、 どれも整数演算になっていますね? このままだと、計算結果もニセ浮動小数点形式なので、 最後に、仮数部が 0~1 に収まるように桁をずらします。 Z・B^L = (Z・B^h)・B^(L-h) によって、 0 ≦ Z・B^h < 1 となれば完了です。 そのような h は、任意の Z に対して必ず1個存在します。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

何を言っているのかわかりません. どのようなことをしたいのか, 1つ例を出してください.

関連するQ&A