Tôi có một chương trình trong C ++ (được biên dịch bằng g ++). Tôi đang cố gắng áp dụng hai nhân đôi là toán hạng cho hàm mô đun, nhưng tôi gặp lỗi sau:
lỗi: toán hạng không hợp lệ của loại 'double' và 'double' thành nhị phân 'toán tử%'
Đây là mã:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat thêm chi tiết sẽ là tuyệt vời. Tôi nghĩ có một ý tưởng về những gì đằng sau hậu trường để khiến những gì bạn nói là đúng, nhưng sẽ tốt hơn nếu thấy những lý do tại sao những gì bạn nói là đúng; sẽ rất thú vị khi xem cách nó hoạt động đằng sau hậu trường (tôi nghĩ tôi hiểu nhưng rất dễ bị sai).
—
RastaJedi 18/03/2016
Các giá trị dấu phẩy động biểu thị bội số nguyên chính xác hoặc phân số lũy thừa của hai số. Ví dụ: số nguyên 0,1 chính xác là 3602879701896397/36028797018963968 (giá trị sau là lũy thừa của hai).
—
supercat
fmod(x,0.1)
sẽ chia x cho phân số chính xác đó và lấy phần còn lại, thay vì chia cho giá trị số "một phần mười".
Có thể trùng lặp: Tại sao phép chia mô đun (%) chỉ hoạt động với số nguyên?
—
Paul R
fmod
có thể gây ra các hành vi không mong muốn. Ví dụ,fmod(1, 0.1);
về mặt toán học nên bằng 0, nhưng thực tế sẽ gần như 0,1. Mức độ lỗi đi lên với độ lớn của thương. Ví dụ,fmod(9E14, 0.1);
đánh giá khoảng 0,05, từ quan điểm toán học chỉ đơn giản là sai.