2016-12-19 9 views
0

私はlispで整数の最小値を取得しようとしています。私は見つけた整数lispの最小値

most-negative-fixnum 

変数は、可能な限り低い数値を表す必要があります。私がそれをやってみるものは、エラーをスローします。

変数「MOST-NEGATIVE-FIXNUM」はアンバインドされています。

lispで変数の値を取得する方法はありますか?これに関する私の研究は結果なしです。

おかげ

+3

SBCLで['most-negative-fixnum'](http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/convar_most-p_ative-fixnum.html)を入力しようとしましたが、 REPL、それは期待どおりに働いた。どのLisp実装を使用していますか? –

+0

これは、あなたが求めているものであれば共通のlispを使用しています – Darlyn

+4

@trolkura:Common Lispは言語です。しかし、どの実装をしているのですか。あなたがしていることを正確に示したいかもしれません。あなたの質問を編集して、どの入力がどの結果につながるかを表示します。 –

答えて

5

次のようにCommon Lispの実装として、例えばSBCLに使用して、動作するはず:

CL-USER> (lisp-implementation-type) 
"SBCL" 
CL-USER> (lisp-implementation-version) 
"1.3.12.51-868cff4" 
CL-USER> most-negative-fixnum 
-4611686018427387904 

[...]最低の可能な数を表すべき変数

これは可能な限り最低のfixnumです。あなたはあまりにも大きな数字を持っている:

CL-USER> (* 10000 most-negative-fixnum) 
-46116860184273879040000 
+1

今興味深いのは、それが-2^62である理由です。 63ビット目に何が起こったのですか? –

+0

@BartvanNierop 64ビットから符号の1ビットを減算し、値を「即時」としてタグ付けするための1ビット。 – coredump

+0

私はサインビットを知っていました。「即時」とはどういう意味ですか? –

2

Common Lispにはその仕様の一部としてbignumを持っているので、あなたは、ビューの言語の観点から持つことができますどのように低い数値に制限はありません。

マシンには有限のメモリがあるので、マシンの持つ数値の下限には限界があります。インプリメンテーションがこの番号を知っているか、実際にそれを作成しようとせずにそれを示すことはできません。オーバーヘッドがなければ、使用可能なメモリを推定値としてバイト単位で使用することができ、利用可能なバイトあたり8ビットを使用します。例えば私のマシンには約11GBの空き容量があるので、実際のストレージとサインとして10GBを使うことができます。実際の数は80Gビットです。 -2^80G + 1または〜-10^2900000000です。利用可能なメモリがないので、印刷することはできません。