精度に潜む罠…
精度をが必要なときには
多分「double」を使うと思うが…。
しかし…。
#include <stdio.h>
void main( void )
{
double A;
int i;
A = 0.0;
for( i = 0 ; i < 10 ; i++ )
A += 0.1;
printf( "結果:%f - %s\n", A, A == 1.0 ? "1.0です。\n" : "1.0でありません。\n" );
}
結果:1.000000 - 1.0でありません。
おいおい、なんだよこれ?
表示結果が1.0なのに
1.0と等しくない?
…
でもこうすると…。
#include <stdio.h>
void main( void )
{
double A;
int i;
A = 0.0;
for( i = 0 ; i < 5 ; i++ )
A += 0.2;
printf( "結果:%f - %s\n", A, A == 1.0 ? "1.0です。\n" : "1.0でありません。\n" );
}
結果:1.000000 - 1.0です。
今度は、合った?
…。
謎である…。
Cには、
まだまだ解明されない
深い闇が
広がっているのである…。
…。
…。
…。
では、済まないので
敢えて結論を言おう!
微妙に1.0なのであると!
人は、これを誤差と呼ぶ!
| 固定リンク
コメント