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.