Mam program w C++ (skompilowany za pomocą g ++). Staram się stosować dwa dwuosobowe jako argumenty do funkcji modułu, ale pojawia się następujący błąd:Nie można użyć modułu na deblu?
error: invalid operands of types 'double' and 'double' to binary 'operator%'
Oto kod:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
Jak już wspomniano, fmod() zapewnia niezbędną funkcję. Jak jeszcze nie zostało to odnotowane, ważne jest, aby zdać sobie sprawę, że błędy zaokrąglania w drugim argumencie 'fmod' mogą powodować nieoczekiwane zachowania. Na przykład 'fmod (1, 0.1);' powinno być matematycznie zerowe, ale w rzeczywistości powinno być prawie 0,1. Zakres błędu wzrasta wraz z wielkością ilorazu. Na przykład 'fmod (9E14, 0.1);' ocenia na około 0,05, co jest z matematycznego punktu widzenia po prostu źle. – supercat
@supercat więcej szczegółów byłoby niesamowite. Myślę, że mam pojęcie o tym, co kryje się za kulisami, aby spowodować, że to, co mówisz, jest prawdą, ale dobrze byłoby zobaczyć powody, dla których to, co mówisz, jest prawdą; byłoby interesujące zobaczyć, jak działa za kulisami (myślę, że rozumiem, ale bardzo łatwo można się mylić). – RastaJedi
Wartości zmiennoprzecinkowe reprezentują dokładne wielokrotności całkowite lub udziały potęg dwóch. Na przykład liczba całkowita równa 0,1 to dokładnie 3602879701896397/36028797018963968 (ta ostatnia wartość to potęga dwóch). 'fmod (x, 0.1)' podzieli x przez ten dokładny ułamek i weź resztę, zamiast dzielić przez wartość liczbową "jedną dziesiątą". – supercat