私はウィキペディア(http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion)の次の例を見つけました。Cでの暗黙の型変換
#include <stdio.h>
int main()
{
int i_value = 16777217;
float f_value = 16777217.0;
printf("The integer is: %i\n", i_value); // 16777217
printf("The float is: %f\n", f_value); // 16777216.000000
printf("Their equality: %i\n", i_value == f_value); // result is 0
}
その説明:「この奇妙な挙動は、それがf_valueと比較されたときに浮動するi_valueの暗黙的なキャストによって引き起こされ、精度を失うキャスト、値が異なる比較対象となっています。」
これは間違っていませんか? i_valueがfloatにキャストされていれば、両方とも精度が同じになり、等しくなります。 したがって、i_valueはdoubleにキャストする必要があります。
g ++(GCC 4.6.2)では、私は同等のために '1'を取得します。 –
@Kerrek:そして私。 VSでは、私は0を取得します。 –
@OliCharlesworth:リテラルを 'f'型または' double'型に変更することに興味があります - すべての場合に '1'を返します... –