Tôi tình cờ gặp ví dụ sau trên wikipedia (http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion).Chuyển đổi loại tiềm ẩn trong 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
}
lời giải thích của họ: "Hành vi kỳ quặc này được gây ra bởi một diễn viên tiềm ẩn của i_value nổi khi nó được so sánh với f_value; một dàn diễn viên mà mất độ chính xác, làm cho các giá trị được so sánh khác nhau"
Điều này không đúng? Nếu i_value được cast thành float, thì cả hai sẽ có cùng độ mất chính xác và chúng sẽ bằng nhau. Vì vậy, i_value phải được truyền thành gấp đôi.
Với g + + (GCC 4.6.2) tôi nhận được '1' cho sự bình đẳng. –
@Kerrek: Và tôi. Trong VS, tôi nhận được 0. –
@OliCharlesworth: Tôi tò mò về việc thay đổi chữ thành 'f' hoặc kiểu thành' double' - tôi nhận '1' trong mọi trường hợp ... –