2009/01/21

浮動小数点の指数部

どもども。今回はプログラムねたです。

C#での浮動小数点型であるdoubleから指数部を取り出す企画です。
まず、doubleの定義から。doubleは64bitで表す倍精度浮動小数。
今回は、一般的なIEEEで定められているIEEE754の場合。(ほかの場合は聞いたことがないが)

|符号部 S|指数部 E|小数部 F|
|  1bit      |  11bit      | 52bit     |

で表す。実際の値は、
equation 
こんな感じになる。

さて、いよいよC#で指数部を取り出す方法だが、値をビット演算したいのでdoubleのままじゃ困る。そんなとき。これを使えばいい。

BitConverter.DoubleToInt64Bits メソッド
http://msdn.microsoft.com/ja-jp/library/system.bitconverter.doubletoint64bits.aspx

ってなわけで、指数部を取り出すプログラム。メソッドにしてみた。

public int doubleExponate(double value){
//doubleをlongに
long bits = BitConverter.DoubleToInt64Bits(value);
//指数部を取り出す
long exponate = (bits >> 52) & 0x7ff;
//-1023
exponate -= 1023;
return (int)exponate;
}



こんな感じ。



ちなみにこれやってて初めて気づいたんだが、

equation (1)


となるらしい、Eって常用対数なのね、自然対数だとばかり思っていた。



今日はこんな感じで、でわでわ。

0 件のコメント: