Package: gpc Version: 2:2.95.4-9 When I print floating-point numbers, I sometimes get garbage like this: -:.00000000000000/+)))./(/0,,.0.-.0/,.-(e-15
Compile and run like this: gpc -O2 -g3 -Wall g2.p && ./a.out The problem seems to be caused by this: w := 44; p := 0; writeln('''', -0.0001e-10:w, ''''); writeln('''', -0.0001e-10:w:p, ''''); writeln('''', 0.0001e-10:w, ''''); writeln('''', 0.0001e-10:w:p, ''''); Feel free to include any of this code (above and/or below) in the gpc test suite. You can have it under the 2-clause BSD license. I have a 32-bit big-endian processor, the MPC7400 v2.9 (ppc "G4"). BTW, the assembly output for this code appears to be terribly inefficient. (only a minute of study though) Floating-point constants seem to get loaded multiple times instead of being kept in registers. For your wishlist, have -Os turn the code below into a loop over an array. @@@@@@@@@@@@@@@@@@@@@@@@@@ TEST CODE @@@@@@@@@@@@@@@@@@@@@@@@@@@@ PROGRAM giga ( input,output ) ; var w:integer; p:integer; begin w := 44; p := 0; writeln('''', 9.999e9, ''''); writeln('''', 9.999e9:w, ''''); writeln('''', 9.999e9:w:p, ''''); writeln('''', 7.777e9:w:p, ''''); writeln('''', 9.999e-10, ''''); writeln('''', 9.999e-10:w, ''''); writeln('''', 9.999e-10:w:p, ''''); writeln('''', 7.777e-10:w:p, ''''); writeln('''', 123.456, ''''); writeln('''', 123.456:w, ''''); writeln('''', 123.456:w:p, ''''); writeln('''', 0.0001e-9, ''''); writeln('''', 0.0001e-9:w, ''''); writeln('''', 0.0001e-9:w:p, ''''); writeln('''', 0.0001e-10, ''''); writeln('''', 0.0001e-10:w, ''''); writeln('''', 0.0001e-10:w:p, ''''); writeln('''', -9.999e9, ''''); writeln('''', -9.999e9:w, ''''); writeln('''', -9.999e9:w:p, ''''); writeln('''', -7.777e9:w:p, ''''); writeln('''', -9.999e-10, ''''); writeln('''', -9.999e-10:w, ''''); writeln('''', -9.999e-10:w:p, ''''); writeln('''', -7.777e-10:w:p, ''''); writeln('''', -123.456, ''''); writeln('''', -123.456:w, ''''); writeln('''', -123.456:w:p, ''''); writeln('''', -0.0001e-9, ''''); writeln('''', -0.0001e-9:w, ''''); writeln('''', -0.0001e-9:w:p, ''''); writeln('''', -0.0001e-10, ''''); writeln('''', -0.0001e-10:w, ''''); writeln('''', -0.0001e-10:w:p, ''''); writeln('''', -0.0/0.0:w:p, ''''); writeln('''', 0.0/0.0:w:p, ''''); writeln('''', -1.0/0.0:w:p, ''''); writeln('''', 1.0/0.0:w:p, ''''); writeln('''', -0.0/1.0:w:p, ''''); writeln('''', 0.0/1.0:w:p, ''''); writeln('''', -1.0/1.0:w:p, ''''); writeln('''', 1.0/1.0:w:p, ''''); writeln('''', -0.0/-0.0:w:p, ''''); writeln('''', 0.0/-0.0:w:p, ''''); writeln('''', -1.0/-0.0:w:p, ''''); writeln('''', 1.0/-0.0:w:p, ''''); writeln('''', -0.0/-1.0:w:p, ''''); writeln('''', 0.0/-1.0:w:p, ''''); writeln('''', -1.0/-1.0:w:p, ''''); writeln('''', 1.0/-1.0:w:p, ''''); writeln end. @@@@@@@@@@@@@@@@@@@@@@@@@@ VERSION INFO @@@@@@@@@@@@@@@@@@@@@@@@@@@@ ||/ Name Version Description +++-==============-==============-============================================ ii gpc 2.95.4-9 The GNU Pascal compiler. ii libc6 2.2.4-7 GNU C Library: Shared libraries and Timezone ii gcc 2.95.4-9 The GNU C compiler. ii cpp 2.95.4-9 The GNU C preprocessor. ii gpc-2.95 2.95.4-0.01100 The GNU Pascal compiler. ii gcc-2.95 2.95.4-0.01100 The GNU C compiler. Package: gpc Source: gcc-defaults (0.16) Version: 2:2.95.4-9 Package: libc6 Source: glibc Version: 2.2.4-7 Package: gcc Source: gcc-defaults (0.16) Version: 2:2.95.4-9 Package: cpp Source: gcc-defaults (0.16) Version: 2:2.95.4-9 Package: gpc-2.95 Source: gcc-2.95 (2.95.4.ds6-0.011006) Version: 1:2.95.4-0.011006 Package: gcc-2.95 Source: gcc-2.95 (2.95.4.ds6-0.011006) Version: 1:2.95.4-0.011006