Math.getExponent în Java

getExponent() dă exponentul binar al unui double; scalb(d, n) înmulțește rapid și exact cu 2 la puterea n.

Sintaxă
static int getExponent(double d)   // și float
static double scalb(double d, int n)

Ce face Math.getExponent

Un double este stocat ca mantisă × 2exponent, cu mantisa între 1 și 2. Math.getExponent(d) returnează acest exponent: pentru 8.0 este 3 (8 = 1 × 23), pentru 10.0 tot 3 (10 = 1.25 × 23). Altfel spus, este partea întreagă a lui log2|d|.

Math.scalb(d, n) calculează d × 2n schimbând doar exponentul, deci rezultatul este exact (fără rotunjire), cât timp nu iese din domeniul lui double. Ambele metode sunt folosite în cod numeric de nivel jos.

Parametri

Parametru Descriere
d Numărul.
n Pentru scalb: puterea lui 2 cu care se înmulțește.

Ce returnează

getExponent: un int. scalb: un double.

Exemple

Exemplul 1: Exponentul binar al unor numere

public class Main {
    public static void main(String[] args) {
        double[] valori = {1, 8, 10, 0.5, 1000};
        for (double v : valori) {
            System.out.println(v + " -> " + Math.getExponent(v));
        }
    }
}

Rezultat

1.0 -> 0
8.0 -> 3
10.0 -> 3
0.5 -> -1
1000.0 -> 9

Exemplul 2: Înmulțire cu puteri ale lui 2

3 × 24 = 48 și 3 × 2-1 = 1.5. 21024 depășește cel mai mare double, deci rezultatul este Infinity.

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.scalb(3.0, 4));
        System.out.println(Math.scalb(3.0, -1));
        System.out.println(Math.scalb(1.0, 1024));
    }
}

Rezultat

48.0
1.5
Infinity

Greșeli frecvente

  • Crezi că getExponent dă exponentul zecimal (din notația 1e3): returnează exponentul în baza 2.

Comenzi înrudite

  • Math.nextUp: Lucrează cu „pașii” dintre numerele double: valoarea imediat următoare sau anterioară și mărimea pasului (ulp).
  • Math.log: log() dă logaritmul natural (baza e), log10() logaritmul în baza 10, iar log1p(x) calculează precis ln(1 + x).
  • Math.pow: Ridică un număr la o putere și returnează rezultatul ca double; exponentul poate fi și negativ sau cu zecimale.