Ce face std::fmod
Operatorul % funcționează doar cu întregi. Pentru numere cu virgulă folosești std::fmod(x, y), care returnează x - n·y, unde n este câtul trunchiat spre zero.
Rezultatul are semnul lui x: fmod(-7, 3) = -1, exact ca -7 % 3 pentru întregi. Dacă vrei mereu un rest pozitiv (de exemplu pentru unghiuri), adaugă y când rezultatul este negativ.
Parametri
| Parametru | Descriere |
|---|---|
x |
Deîmpărțitul. |
y |
Împărțitorul (diferit de 0). |
Ce returnează
Restul, cu semnul lui x.
Exemple
Exemplul 1: Resturi cu zecimale și semn
#include <cmath>
#include <print>
int main() {
std::println("fmod(10.5, 3) = {}", std::fmod(10.5, 3.0));
std::println("fmod(-7, 3) = {}", std::fmod(-7.0, 3.0));
std::println("-7 % 3 = {}", -7 % 3);
}
Rezultat
fmod(10.5, 3) = 1.5
fmod(-7, 3) = -1
-7 % 3 = -1
Exemplul 2: Aducerea unui unghi în [0, 360)
#include <cmath>
#include <print>
int main() {
for (double unghi : {370.0, 725.5, -90.0}) {
double normalizat = std::fmod(unghi, 360.0);
if (normalizat < 0) {
normalizat += 360.0;
}
std::println("{}° -> {}°", unghi, normalizat);
}
}
Rezultat
370° -> 10°
725.5° -> 5.5°
-90° -> 270°
Greșeli frecvente
- Încerci
10.5 % 3: nu compilează. Foloseștestd::fmod. - Te aștepți ca
fmod(-90, 360)să dea 270. Dă -90; corectează semnul manual.
Comenzi înrudite
std::trunc: Taie partea zecimală a unui număr, rotunjind spre zero.std::div: Calculează într-un singur apel câtul și restul împărțirii a două numere întregi.std::floor: Rotunjește în jos la cel mai apropiat întreg (floor) sau în sus (ceil).