I see the problem. You limit *⎕PP to 16, which isn't enough digits. 1E**¯16 is 1 to 16 places.* I didn't notice this, because you just set it to 16 if I set it to 18.
You need to allow a larger *⎕PP to exactly reproduce floating data written out and read back in.*