std::fmod în C++

Calculează restul împărțirii a două numere cu virgulă (echivalentul lui % pentru double).

Sintaxă
double fmod(double x, double y);

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ște std::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).