Vì vậy, tôi đã tham gia cuộc thi điện toán và tôi đã nhận thấy một lỗi lạ. pow (26,2) sẽ luôn trả về 675, và đôi khi 674? Mặc dù câu trả lời chính xác là 676. Những loại lỗi này cũng xảy ra với pow (26,3), pow (26,4) vv Sau khi gỡ lỗi sau cuộc thi, tôi tin rằng câu trả lời phải làm với thực tế int rounds down. Điều thú vị là loại lỗi này chưa bao giờ xảy ra với tôi trước đây. Các máy tính tôi đã có được chạy mingw trên windows 8. Phiên bản GCC là khá mới, như 2-3 tháng tuổi tôi tin. Nhưng những gì tôi thấy là nếu tôi bật cờ tối ưu hóa o1/o2/o3 trên các loại lỗi này sẽ biến mất một cách thần kỳ. pow (26,2) sẽ luôn luôn nhận được 676 aka câu trả lời đúng Bất cứ ai có thể giải thích lý do tại sao?GCC C++ độ chính xác pow
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout<<pow(26,2)<<endl;
cout<<int(pow(26,2))<<endl;
}
Kết quả có đôi là lạ.
double a=26;
double b=2;
cout<<int(pow(a,b))<<endl; #outputs 675
cout<<int(pow(26.0,2.0))<<endl; # outputs 676
cout<<int(pow(26*1.00,2*1.00))<<endl; # outputs 676
'pow (26,2)' như trong 26 * 26 = 676? –
yea, pow như trong chức năng điện tiêu chuẩn. –
Bạn có thể đăng mã của mình không? Tôi không chắc chắn làm thế nào bạn sẽ có được những giá trị này hoặc. –