2012-02-18 15 views
0

整数演算で32ビット整数をIEEE 754浮動小数点表現に変換できるアルゴリズムはありますか?float表現の整数表現


私はこれに関するいくつかの考えを持っていますが、今のところこれらの作品はありません。 (Cを使用して)

  1. 私は整数をシフトすることを考えていたが、その後、私は その上に新しい浮動小数点表現を構築することができませんでした。

  2. 私は整数をバイナリに変換することができますが、最初のアプローチでは同じ の問題があります。

+1

「整数をバイナリに変換する」とはどういう意味ですか?すでにバイナリになっています... –

答えて

2

excellent resource on float

Address +3  +2  +1  +0 
Format SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM 

S 1が負であり、0が正の符号ビットを表します。

Eは127

Mが23ビットの正規化仮数部でのオフセットを有する2つの補数の指数です。最上位ビットは常に1 であり、従って、私はビットの配列としてNUMを使用します、2の補数


ためhereを見てその後

に格納されていない、私は「このISNを知っていますT標準C配列の範囲のアクセスはできますが、だから、基本的なアルゴリズムのために、我々はS.

bit S = 0; 
if (num[0] ==1) { 
    S = 1; 
    num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1 
} 
を記入し始めるポイント

を取得

これでSが設定され、残りの部分にスカラー値が設定されました。

次に、最初のインデックス1を見つけることによって、私たちの数字を仮数部に配置することができます。これにより、指数部も見つけることができます。ここで注意すべき点は、分数int値を持つことはできないので、指数は常に正であることに注意してください。 (また、値がここで無限ループを避けるために、最初の0であるか、単に適切にループを変更した場合、私は怠け者チェックするための特殊なケースを作る)

int pos = 1; 
signed byte E = 32; 
bit[23] M; 
while(num[pos] == 0) { 
    --E; 
    ++pos; 
} 
int finalPos = min(32, pos+23); //don't get too many bits 
M = num[pos+1..finalPos]; //set the mantissa bits 

次に、あなたとあなたのフロートを構築ビットはS、E、M