// pentium.cpp #include // Luvut, jotka muka aiheuttavat Pentiumissa virheen, niin etta // z * (1/z) ei ole 1. Kaksi ensimmaista lukua lienee painovirheita. // 486:ssa laskut menevat tarkkuuden puitteissa (16 numeroa) oikein. // Tulokset kirjoitetaan myos tiedostoon pentvir.txt #define N 22 static double Numbers[N] = { 9895574626641.0, 1443107810341.0, 52776539295213.0, 206158356633.0, 13194134824767.0, 26388269649885.0, 26388269650425.0, 52776539301125.0, 52776539301653.0, 26388269651561.0, 12884897291.0, 13194134826115.0, 52776539307823.0, 13194134827143.0, 13194134827457.0, 26388276711601.0, 13194138356107.0, 26388276712811.0, 52776553426399.0, 13194139238995.0, 824633702441.0, 6597069619549.0 }; int main (void) { FILE *ofi = fopen("pentvir.txt","w"); int i; double x,y; for (i = 0; i < N; ++i) { x = 1.0/Numbers[i]; y = x * Numbers[i]; printf("%2d %20.18f\n",i,y); fprintf(ofi,"%2d %20.18f\n",i,y); } { double x,y,z; x = 4195835.0; y = 3145727.0; z = x - (x/y)*y; printf("%20.16lf\n",z); } return 0; }