2015/05/12
指数表記
続けてkbkさんのところからネタをもらうけど
http://www.kt.rim.or.jp/~kbk/zakkicho/15/zakkicho1505b.html#D20150512-6
difference - 言語比較 > 10のべき数を表す記号 > D / E / *10^ - Qiita
D って FORTRAN 以外でも使ってた?
Common LispとSchemeにはDとEだけじゃなくてFもLもSもあるぞ。
1.0E1 ; デフォルトの精度 1.0D1 ; 倍精度 (double-float) 1.0F1 ; 単精度 (single-float) 1.0L1 ; 長精度 (long-float) 1.0S1 ; 短精度 (short-float)
で、ちょっと落とし穴なのは、Common Lispの場合 eで使われるデフォルトの初期値が単精度なんだよね。 メモリが少なかったり倍精度演算が遅かったりした時代の名残りかもしれないけど、 倍精度で計算してるつもりで定数をeで書いといたらそこだけ単精度に丸められて微妙に誤差が、 みたいなことが。 (Schemeはデフォルトの精度は決められていない。Gaucheでは全てdouble floatにする。)
なので倍精度を確実にしたいならdを使うのが良い。
ところでCLのshort floatは仮数部13bit以上、指数部5bit以上と決められているので 画像フォーマットで使われるhalf float (仮数部11bit)だと微妙に足りない。 single floatとは別にshort floatを実装してた処理系ってあったのかなあ。 36bit/wordのマシンだと1wordに2つのshort floatが入るから、 そういうアーキテクチャで使われてたのかも。
Tags: CommonLisp, Scheme, Programming
g000001 (2015/05/12 22:44:55):
shiro (2015/05/13 08:30:51):