Tại sao điều này đúng? Java xuất hiện để tạo ra một kết quả với một sự khác biệt nhỏ khi nhân hai float so với C và thậm chí là phương thức Java Math.pow.Điểm nổi bật Java vs C: "x * x" khác với "pow (x, 2)"?
Java:
float a = 0.88276923;
double b = a * a; // b becomes 0.779281497001648 <---- what???
b = Math.pow(a,2); // b becomes 0.7792815081874238
C:
float a = 0.88276923;
double b = a * a; // b becomes 0.7792815081874238
pow(a,2); // b becomes 0.7792815081874238
Cập nhật: mỗi bình luận Ed S., tôi cũng đã tìm thấy rằng các hành vi C thay đổi tùy thuộc vào trình biên dịch. Sử dụng gcc nó xuất hiện để phù hợp với hành vi Java. Sử dụng studio trực quan (tùy thuộc vào nền tảng đích của bạn) nó có thể tạo ra các kết quả được thấy ở trên hoặc những kết quả được thấy trong Java. Ugh.
http://floating-point-gui.de/ –
Ah, số học dấu chấm động. Một pháo đài thuần khiết về độ chính xác và độ tin cậy. – Perception
Tôi biết rằng phao không chính xác. Tuy nhiên, tôi cho rằng sự thiếu chính xác của họ là nhất quán. – mark