Math.IEEEremainder în Java

Restul împărțirii după standardul IEEE 754: f1 − f2 × n, unde n este câtul rotunjit la cel mai apropiat întreg.

Sintaxă
static double IEEEremainder(double f1, double f2)

Ce face Math.IEEEremainder

Operatorul % pe double calculează restul cu câtul tăiat spre zero, deci restul are semnul lui f1. Math.IEEEremainder(f1, f2) folosește câtul rotunjit la cel mai apropiat întreg (la egalitate, spre numărul par). De aceea rezultatul poate fi negativ chiar dacă ambele numere sunt pozitive: este cea mai mică abatere față de un multiplu al lui f2.

Este util când vrei să aduci o valoare cât mai aproape de zero într-un ciclu, de exemplu un unghi în intervalul [-180°, 180°]: IEEEremainder(unghi, 360).

Parametri

Parametru Descriere
f1 Deîmpărțitul.
f2 Împărțitorul.

Ce returnează

Un double, restul IEEE; NaN dacă f2 este 0.

Exemple

Exemplul 1: Comparație cu %

public class Main {
    public static void main(String[] args) {
        double[][] perechi = {{10, 3}, {11, 3}, {7.5, 2}, {-10, 3}};
        for (double[] p : perechi) {
            System.out.println(p[0] + ", " + p[1] + ": % = " + (p[0] % p[1])
                    + ", IEEEremainder = " + Math.IEEEremainder(p[0], p[1]));
        }
    }
}

Rezultat

10.0, 3.0: % = 1.0, IEEEremainder = 1.0
11.0, 3.0: % = 2.0, IEEEremainder = -1.0
7.5, 2.0: % = 1.5, IEEEremainder = -0.5
-10.0, 3.0: % = -1.0, IEEEremainder = -1.0

Exemplul 2: Unghiuri aduse în intervalul [-180°, 180°]

public class Main {
    public static void main(String[] args) {
        double[] unghiuri = {350, 190, -200, 540, 45};
        for (double u : unghiuri) {
            System.out.println(u + "° -> " + Math.IEEEremainder(u, 360) + "°");
        }
    }
}

Rezultat

350.0° -> -10.0°
190.0° -> -170.0°
-200.0° -> 160.0°
540.0° -> -180.0°
45.0° -> 45.0°

Greșeli frecvente

  • Folosești IEEEremainder ca înlocuitor pentru % și te miri de rezultatele negative. Pentru un rest obișnuit, între 0 și f2, folosește % (și adaugă f2 la valorile negative).

Comenzi înrudite

  • Math.floorDiv: Împărțire întreagă rotunjită în jos (floorDiv) sau în sus (ceilDiv), cu restul potrivit (floorMod, ceilMod).
  • Math.fma: Calculează a × b + c cu o singură rotunjire la final (fused multiply-add), mai precis decât a * b + c.
  • Math: Clasa cu funcții matematice gata făcute: rotunjiri, puteri, radicali, trigonometrie, minim/maxim și calcule întregi sigure.