Skip to content

Current CL float details

Tarn W. Burton edited this page Oct 2, 2024 · 6 revisions
Implementation short-float single-float double-float long-float
ABCL binary32 binary32 binary64 binary64
Allegro binary32 binary32 binary64 binary64
CCL binary32 binary32 binary64 binary64
CLISP custom25 binary32 binary64 arbitrary
CMUCL binary32 binary32 binary64 binary64
Clasp binary32 binary32 binary64 binary64, binary80 or binary128
ECL binary32 binary32 binary64 long double*
GCL binary32 binary64 binary64 binary64
Lispworks binary32 binary32 binary64 binary64
MKCL binary32 binary32 binary64 binary64
SBCL binary32 binary32 binary64 binary64
  • ECL's long-float is whatever is provided by C's long double. On x86 platforms this is the 80-bit float provided by the Intel processors. On platforms like ARM it could be __float128.

abcl-1.9.3-dev-fasl43-linux-x64 float traits

trait single-float double-float
storage-size 32 64
significand-size 24 53
exponent-size 8 11
sign-size 1 1
hidden-bit-p T T
subnormalp T T
non-number-p T T
exponent-bias 150 1075
max-exponent 104 971
min-exponent -172 -1126
arithmetic-size 32 64

ccl-1.12-f98-linux-x64 float traits

trait single-float double-float
storage-size 32 64
significand-size 24 53
exponent-size 8 11
sign-size 1 1
hidden-bit-p T T
subnormalp T T
non-number-p T T
exponent-bias 150 1075
max-exponent 104 971
min-exponent -172 -1126
arithmetic-size 32 64

clasp-cclasp-boehmprecise-2.6.0-45-gef86dac4a-gd83c7013-cst-linux-x64 float traits

trait single-float double-float
storage-size 32 64
significand-size 24 53
exponent-size 8 11
sign-size 1 1
hidden-bit-p T T
subnormalp T T
non-number-p T T
exponent-bias 150 1075
max-exponent 104 971
min-exponent -172 -1126
arithmetic-size 32 64

clisp-2.49.93+-linux-x64 float traits

trait short-float single-float double-float
storage-size 25 32 64
significand-size 17 24 53
exponent-size 8 8 11
sign-size 1 1 1
hidden-bit-p T T T
subnormalp NIL NIL NIL
non-number-p T T T
exponent-bias 143 150 1075
max-exponent 111 104 971
min-exponent -142 -149 -1074
arithmetic-size 32 32 64

non-number-p is currently wrong.

cmu-2024-03-10_18_28_32__21e_unicode_-linux-x86 float traits

trait single-float double-float
storage-size 32 64
significand-size 24 53
exponent-size 8 11
sign-size 1 1
hidden-bit-p T T
subnormalp T T
non-number-p T T
exponent-bias 150 1075
max-exponent 104 971
min-exponent -172 -1126
arithmetic-size 32 64

ecl-24.5.10-4f0fed46-linux-x64 float traits

trait single-float double-float long-float
storage-size 32 64 80
significand-size 24 53 64
exponent-size 8 11 15
sign-size 1 1 1
hidden-bit-p T T NIL
subnormalp T T T
non-number-p T T T
exponent-bias 150 1075 16446
max-exponent 104 971 16320
min-exponent -172 -1126 -16508
arithmetic-size 32 64 128

lwpe-8.0.1-linux-x64 float traits

trait single-float double-float
storage-size 32 64
significand-size 24 53
exponent-size 8 11
sign-size 1 1
hidden-bit-p T T
subnormalp T T
non-number-p T T
exponent-bias 150 1075
max-exponent 104 971
min-exponent -172 -1126
arithmetic-size 32 64

sbcl-2.4.5-linux-x64 float traits

trait single-float double-float
storage-size 32 64
significand-size 24 53
exponent-size 8 11
sign-size 1 1
hidden-bit-p T T
subnormalp T T
non-number-p T T
exponent-bias 150 1075
max-exponent 104 971
min-exponent -172 -1126
arithmetic-size 32 64

ecl-23.9.9-unknown-linux-aarch64 float traits

trait single-float double-float long-float
storage-size 32 64 128
significand-size 24 53 113
exponent-size 8 11 15
sign-size 1 1 1
hidden-bit-p T T T
subnormalp T T T
non-number-p T T T
exponent-bias 150 1075 16495
max-exponent 104 971 16271
min-exponent -172 -1126 -16606
arithmetic-size 32 64 128