Problem with parsing double-floats in LispWorks
Closed this issue · 3 comments
phantomics commented
I tried: (parse-number:parse-number "1e10" :float-format 'double-float)
And got: 1.000000000000004D10
Haven't had this problem in other CL implementations.
sionescu commented
Please run the test suite and paste the output here: (asdf:test-system :parse-number)
phantomics commented
I found the reason for this. (expt 10.0d0 10)
in LW returns 1.000000000000004D10
, and parse-number uses (expt)
to generate its double-float output. I'm going to bring it up with LW's tech support. If it's helpful for you, I'm attaching the test output below. That said the root of the problem has been found so I'll close this issue.
String value ( READ value) = Parsed value *rdff*
"1" ( 1) = 1 DOUBLE-FLOAT
"1" ( 1) = 1 SINGLE-FLOAT
"-1" ( -1) = -1 DOUBLE-FLOAT
"-1" ( -1) = -1 SINGLE-FLOAT
"1034" ( 1034) = 1034 DOUBLE-FLOAT
"1034" ( 1034) = 1034 SINGLE-FLOAT
"3." ( 3) = 3 DOUBLE-FLOAT
"3." ( 3) = 3 SINGLE-FLOAT
"-3." ( -3) = -3 DOUBLE-FLOAT
"-3." ( -3) = -3 SINGLE-FLOAT
"-364" ( -364) = -364 DOUBLE-FLOAT
"-364" ( -364) = -364 SINGLE-FLOAT
"80/335" ( 16/67) = 16/67 DOUBLE-FLOAT
"80/335" ( 16/67) = 16/67 SINGLE-FLOAT
"1.3214" ( 1.3214) = 1.3214 DOUBLE-FLOAT
"1.3214" ( 1.3214) = 1.3214 SINGLE-FLOAT
"3.5333" ( 3.5333) = 3.5333 DOUBLE-FLOAT
"3.5333" ( 3.5333) = 3.5333 SINGLE-FLOAT
"2.4E4" ( 24000.0) = 24000.000000000022 DOUBLE-FLOAT
"2.4E4" ( 24000.0) = 24000.0 SINGLE-FLOAT
"6.8d3" ( 6800.0) = 6800.000000000004 DOUBLE-FLOAT
"6.8d3" ( 6800.0D0) = 6800.000000000004D0 SINGLE-FLOAT
"#xFF" ( 255) = 255 DOUBLE-FLOAT
"#xFF" ( 255) = 255 SINGLE-FLOAT
"#b-1000" ( -8) = -8 DOUBLE-FLOAT
"#b-1000" ( -8) = -8 SINGLE-FLOAT
"#o-101/75" ( -65/61) = -65/61 DOUBLE-FLOAT
"#o-101/75" ( -65/61) = -65/61 SINGLE-FLOAT
"13.09s3" ( 13090.0F0) = 13090.0F0 DOUBLE-FLOAT
"13.09s3" ( 13090.0) = 13090.0 SINGLE-FLOAT
"35.66l5" ( 3566000.0) = 3566000.000000007 DOUBLE-FLOAT
"35.66l5" ( 3566000.0D0) = 3566000.000000007D0 SINGLE-FLOAT
"21.4f2" ( 2140.0F0) = 2140.0F0 DOUBLE-FLOAT
"21.4f2" ( 2140.0) = 2140.0 SINGLE-FLOAT
"#C(1 2)" ( #C(1 2)) = #C(1 2) DOUBLE-FLOAT
"#C(1 2)" ( #C(1 2)) = #C(1 2) SINGLE-FLOAT
"#c ( #xF #o-1 ) " ( #C(15 -1)) = #C(15 -1) DOUBLE-FLOAT
"#c ( #xF #o-1 ) " ( #C(15 -1)) = #C(15 -1) SINGLE-FLOAT
"#c(1d1 2s1)" ( #C(10.0 20.0)) = #C(10.000000000000002 20.0) DOUBLE-FLOAT
"#c(1d1 2s1)" ( #C(10.0D0 20.0D0)) = #C(10.000000000000002D0 20.0D0) SINGLE-FLOAT
"#16rFF" ( 255) = 255 DOUBLE-FLOAT
"#16rFF" ( 255) = 255 SINGLE-FLOAT
"#9r10" ( 9) = 9 DOUBLE-FLOAT
"#9r10" ( 9) = 9 SINGLE-FLOAT
"#C(#9r44/61 4f4)" (#C(0.72727275F0 40000.0F0)) = #C(0.72727275F0 40000.0F0) DOUBLE-FLOAT
"#C(#9r44/61 4f4)" ( #C(0.72727275 40000.0)) = #C(0.72727275 40000.0) SINGLE-FLOAT
"2.56 " ( 2.56) = 2.56 DOUBLE-FLOAT
"2.56 " ( 2.56) = 2.56 SINGLE-FLOAT
"+1" ( 1) = 1 DOUBLE-FLOAT
"+1" ( 1) = 1 SINGLE-FLOAT
"+1." ( 1) = 1 DOUBLE-FLOAT
"+1." ( 1) = 1 SINGLE-FLOAT
"+1.4" ( 1.4) = 1.4 DOUBLE-FLOAT
"+1.4" ( 1.4) = 1.4 SINGLE-FLOAT
"+.14" ( 0.14) = 0.14 DOUBLE-FLOAT
"+.14" ( 0.14) = 0.14 SINGLE-FLOAT
"+0.14" ( 0.14) = 0.14 DOUBLE-FLOAT
"+0.14" ( 0.14) = 0.14 SINGLE-FLOAT
String Value: Invalid
"5 . 5" T DOUBLE-FLOAT
"5 . 5" T SINGLE-FLOAT
"--10" T DOUBLE-FLOAT
"--10" T SINGLE-FLOAT
"/20" T DOUBLE-FLOAT
"/20" T SINGLE-FLOAT
"d10" T DOUBLE-FLOAT
"d10" T SINGLE-FLOAT
"5/5/5" T DOUBLE-FLOAT
"5/5/5" T SINGLE-FLOAT
"1.2.3" T DOUBLE-FLOAT
"1.2.3" T SINGLE-FLOAT
"1d0s0" T DOUBLE-FLOAT
"1d0s0" T SINGLE-FLOAT
"10/" T DOUBLE-FLOAT
"10/" T SINGLE-FLOAT
"10d" T DOUBLE-FLOAT
"10d" T SINGLE-FLOAT
"10.5/20" T DOUBLE-FLOAT
"10.5/20" T SINGLE-FLOAT
"15/20.5" T DOUBLE-FLOAT
"15/20.5" T SINGLE-FLOAT
"5/10d0" T DOUBLE-FLOAT
"5/10d0" T SINGLE-FLOAT
"5d05/10" T DOUBLE-FLOAT
"5d05/10" T SINGLE-FLOAT
"5d0.1" T DOUBLE-FLOAT
"5d0.1" T SINGLE-FLOAT
"#x5.0d0" T DOUBLE-FLOAT
"#x5.0d0" T SINGLE-FLOAT
"#x5l0" T DOUBLE-FLOAT
"#x5l0" T SINGLE-FLOAT
"10/-5" T DOUBLE-FLOAT
"10/-5" T SINGLE-FLOAT
"#x5.0" T DOUBLE-FLOAT
"#x5.0" T SINGLE-FLOAT
"." T DOUBLE-FLOAT
"." T SINGLE-FLOAT
"#x10/-5" T DOUBLE-FLOAT
"#x10/-5" T SINGLE-FLOATUnexpected failures:
#c(1d1 2s1),
35.66l5,
6.8d3,
2.4E4.
sionescu commented
Thanks. If they fix that bug, can you try running the tests again ? It looks like there was more than one failure.