isaki68k / nono-issue

1 stars 0 forks source link

luna68k で awk の動作が異なる #106

Closed isaki68k closed 2 years ago

isaki68k commented 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;
}
isaki68k commented 2 years ago

5a58cb68 (2022-01-13) で対応。