どもども。今回はプログラムねたです。
C#での浮動小数点型であるdoubleから指数部を取り出す企画です。
まず、doubleの定義から。doubleは64bitで表す倍精度浮動小数。
今回は、一般的なIEEEで定められているIEEE754の場合。(ほかの場合は聞いたことがないが)
|符号部 S|指数部 E|小数部 F|
| 1bit | 11bit | 52bit |
さて、いよいよ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;
}
こんな感じ。
ちなみにこれやってて初めて気づいたんだが、
となるらしい、Eって常用対数なのね、自然対数だとばかり思っていた。
今日はこんな感じで、でわでわ。
0 件のコメント:
コメントを投稿