Hi Jürgen,
To reproduce a floating point value exactly when it is read back in after being converted to ASCII, it is necessary to write out one past the maximum number of decimal digits the floating point representation supports.
64 bit IEEE is 17 decimal places, so you have to write out 18.
So a user who sets ⎕PP to 18, and displays or formats a number, should get the exact value of the number displayed, and the floating point representation should be recreated down to the last bit when the number is read back in. This is important when people use workspaces to perform functions similar to )IN and )OUT, or when they write data to text files, and want to get the same data back in their workspace after reading it back in.
In APL2 this works correctly...
⎕PP←18
1J1E¯16
1J9.9999999999999998E¯17
In GNU APL it doesn't
⎕PP←18
1J1E¯16
1
The fact that I used 1D45*8 to create a number slightly different from 1.0, and 2
⎕TF to display the number to full 18 digit precision are tangential to the point I am making.
Regards,
Mike