理系トップクラスの大学院生でこの体たらくとは.CS系の学生には常識中の常識だと思うが,浮動小数点は信用ならないから,正確な演算結果が欲しいなら固定小数点でやる.以下,実証コードをC言語で.コンパイラはBCC32 5.5.1です.
#include <stdio.h>
union test {
    double a;
    int b[2];
} test;
void main() {
    union test a;
    
    a.a = 0.1;
    printf("%lf=%x %x\n", a.a, a.b[1], a.b[0]);
    
    a.a = 1.0;
    a.a -= 0.9;
    printf("%lf=%x %x\n", a.a, a.b[1], a.b[0]);
    
    a.a = 0.09;
    a.a += 0.01;
    printf("%lf=%x %x\n", a.a, a.b[1], a.b[0]);
}実行結果はこんな感じ.
C:\Temp>test
0.100000=3fb99999 9999999a
0.100000=3fb99999 99999998
0.100000=3fb99999 99999999JK.0.1っていう数字を正確に表現できる君は,コンピュータよりも圧倒的に優れているよ.間違いなく.

