暗黙のキャスト
この前は、
「演算を行う場合には、演算中の
最も範囲が大きい変数に
合わせてから演算する。」
と書いたのだが…
この適用範囲が振るっている!
A = 1 / 2 * 0.5
A = 1.0 / 2 * 0.5
両方とも計算結果は、0.25だ。
間違い無い!
…
間違ってたらゴメンナサイ…。<弱気…。
#include <stdio.h>
void main( void )
{
double A;
A = 1 / 2 * 0.5;
printf( "結果:%f\n", A );
A = 1.0 / 2 * 0.5;
printf( "結果:%f\n", A );
}
結果:0.000000
結果:0.250000
となる…。
不思議不思議…。
どおやら初めのは、
(double)0.00 = (double)( (int)1 / (int)2 ) * (double)0.5
次のは、
(double)0.25 = (double)( (double)1.0 / (double)2 ) * (double)0.5
らしい…。
この辺は、慣れ…?
結局みんな「double」で計算すればOK?
安直が最大の対策かも…。
謎は深まるばかり…。
| 固定リンク
コメント