Ho un programma in C++ (compilato usando g ++). Sto cercando di applicare due doppie come operandi alla funzione modulo, ma ottengo il seguente errore:Non è possibile utilizzare il modulo sui doppi?
error: invalid operands of types 'double' and 'double' to binary 'operator%'
Ecco il codice:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
Come è stato notato, fmod() fornisce la funzione necessaria. Come non è stato ancora notato, è importante rendersi conto che gli errori di arrotondamento nel secondo operando di 'fmod' possono causare comportamenti imprevisti. Ad esempio, 'fmod (1, 0.1);' matematicamente dovrebbe essere zero, ma in realtà sarà quasi 0.1. L'entità dell'errore aumenta con l'entità del quoziente. Ad esempio, 'fmod (9E14, 0.1);' valuta circa 0.05, che è da un punto di vista matematico semplicemente sbagliato. – supercat
@supercat più dettagli sarebbe fantastico. Penso di avere un'idea di cosa succede dietro le quinte per far sì che ciò che dici sia vero, ma sarebbe bello vedere i motivi per cui ciò che dici è vero; sarebbe interessante vedere come funziona dietro le quinte (penso di capire ma potrebbe facilmente sbagliare). – RastaJedi
I valori in virgola mobile rappresentano multipli interi esatti o frazioni di potenze di due. Ad esempio, il numero intero letterale 0.1 è esattamente 3602879701896397/36028797018963968 (quest'ultimo valore è una potenza di due). 'fmod (x, 0.1)' dividerà x per quella frazione precisa e prenderà il resto, invece di dividere per il valore numerico "un decimo". – supercat