数値

数値には、integerとfloat(浮動小数点)の2種類があり、 両方とも29ビットの値と1ビットの符号で表現される。 したがって、integerは$ -$536,870,912から536,870,911までの範囲となる。 floatは、正および負で4.8E$ -$38から3.8E38までの範囲を表現でき、 その有効数字は、十進数で約6桁すなわち浮動小数点誤差は1/1,000,000程度である。

数値は、いつもオブジェクトでなくポインタで表現される。 これは、EusLispのオブジェクト指向の唯一の例外事項である。 しかしながら、数値は決してヒープメモリを無駄にすることがないため、 数値を扱うアプリケーションでは、ガーベージコレクション の原因とならず有効に動作する。

EusLispは、文字型を持たないため、文字列はintegerで表現される。 文字コード表と無関係なプログラムを書くためには、 #\ 読みだしマクロが役に立つ。しかし、文字が読まれるとき、 数値表現に変換されるため、プリンタは #\ の表記法に対してどのように再変換すればよいのか解らない。

数値は、図[*]のlong wordの中に2つのtagビットを持っている。 それで、数値計算に使用するときは、シフトまたはマスクすることにより このビットを消す必要がある。 integerは数値シフトによりMSBの2ビットを無視し、floatはマスクにより LSBの2ビットを無視する。 VAXのようなアーキテクチャのためにByte swapも必要である。なぜなら、 意味を持つ最小の大きさのByteとして右端の1Byteが使用できないためである。



2016-04-05