Saya punya program di C ++ (dikompilasi menggunakan g ++). Saya mencoba menerapkan dua ganda sebagai operan ke fungsi modulus, tetapi saya mendapatkan kesalahan berikut:
kesalahan: operan tidak valid dari tipe 'ganda' dan 'ganda' ke biner 'operator%'
Berikut kodenya:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat detail lebih lanjut akan luar biasa. Saya pikir punya ide tentang apa yang ada di balik layar untuk menyebabkan apa yang Anda katakan itu benar, tetapi akan baik untuk melihat alasan mengapa apa yang Anda katakan itu benar; akan menarik untuk melihat cara kerjanya di belakang layar (saya pikir saya mengerti tetapi bisa sangat mudah salah).
—
RastaJedi
Nilai floating-point mewakili kelipatan integer yang tepat atau fraksi kekuatan dua. Misalnya, integer literal 0,1 persis 3602879701896397/36028797018963968 (nilai yang terakhir adalah kekuatan dua).
—
supercat
fmod(x,0.1)
akan membagi x dengan fraksi yang tepat dan mengambil sisanya, daripada membaginya dengan nilai numerik "sepersepuluh".
Kemungkinan rangkap: Mengapa divisi modulus (%) hanya bekerja dengan bilangan bulat?
—
Paul R
fmod
dapat menyebabkan perilaku yang tidak terduga. Sebagai contoh, secarafmod(1, 0.1);
matematis harus nol, tetapi pada kenyataannya hampir 0,1. Tingkat kesalahan naik dengan besarnya hasil bagi. Sebagai contoh,fmod(9E14, 0.1);
mengevaluasi menjadi sekitar 0,05, yang dari sudut pandang matematika jelas salah.