Closed isaki68k closed 2 years ago
元は awk(1) の動作が異なるという話で、再現方法を調べてくださったもの。 [netbsd,10599]
小さい C のプログラムで、再現できました。 # そのまま、でした。 2回目以降の、0 < 3 が、== 判定になっちゃいます。 wrong result i: 1 j: 0 d1: 0.000000 d2: 3.000000 exp: -1.000000 ret: 0 wrong result i: 2 j: 0 d1: 0.000000 d2: 3.000000 exp: -1.000000 ret: 0 : wrong result i: 9 j: 0 d1: 0.000000 d2: 3.000000 exp: -1.000000 ret: 0 ---->8-------->8-------->8-------->8-------->8-------->8-------- #include <stdio.h> double idata[4][3] = {{0.0, 3.0, -1}, {1.0, 3.0, -1}, {2.0, 3.0, -1}, {3.0, 3.0, 0}}; int cmp(double d1, double d2) { if (d1 == d2) return 0; else if (d1 - d2 < 0) return -1; else return 1; } int main() { int rpt = 10; int idata_n = 4; int ret, i, j; double d1, d2, exp; for (i = 0; i < rpt; i++) { for (j = 0; j < idata_n; j++) { d1 = idata[j][0]; d2 = idata[j][1]; exp = idata[j][2]; ret = cmp(d1, d2); if (exp != (double)ret) printf(" wrong result i: %d j: %d d1: %f d2: %f " "exp: %f ret: %d\n", i, j, d1, d2, exp, ret); } } return 0; }
5a58cb68 (2022-01-13) で対応。
元は awk(1) の動作が異なるという話で、再現方法を調べてくださったもの。 [netbsd,10599]