Math.log în Java

log() dă logaritmul natural (baza e), log10() logaritmul în baza 10, iar log1p(x) calculează precis ln(1 + x).

Sintaxă
static double log(double a)
static double log10(double a)   // Java 5
static double log1p(double x)   // Java 5

Ce face Math.log

Math.log(x) returnează logaritmul natural (ln x), adică puterea la care trebuie ridicat e ca să obții x. Math.log10(x) returnează logaritmul zecimal: log10(1000) este 3.0, util pentru a afla numărul de cifre. Pentru altă bază b folosește formula Math.log(x) / Math.log(b).

Math.log1p(x) calculează ln(1 + x) precis pentru x foarte mic, unde log(1 + x) pierde precizie. Pentru x negativ rezultatul este NaN, iar pentru 0 este -Infinity (la log și log10).

Parametri

Parametru Descriere
a / x Numărul, pozitiv.

Ce returnează

Un double; NaN pentru argumente negative, -Infinity pentru 0.

Exemple

Exemplul 1: Logaritmi în diverse baze

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.log(Math.E));
        System.out.println(Math.log10(1000));
        System.out.println(Math.log(1024) / Math.log(2));
        System.out.println(Math.log(0));
        System.out.println(Math.log(-1));
    }
}

Rezultat

1.0
3.0
10.0
-Infinity
NaN

Exemplul 2: Numărul de cifre al unui număr

public class Main {
    public static void main(String[] args) {
        long[] numere = {7, 2026, 19_050_000};
        for (long n : numere) {
            int cifre = (int) Math.log10(n) + 1;
            System.out.println(n + ": " + cifre + (cifre == 1 ? " cifră" : " cifre"));
        }
    }
}

Rezultat

7: 1 cifră
2026: 4 cifre
19050000: 8 cifre

Exemplul 3: Câți ani până se dublează un depozit

Din S · (1 + r)n = 2S rezultă n = ln 2 / ln(1 + r). Cu log1p calculăm ln(1 + r) precis.

public class Main {
    public static void main(String[] args) {
        double[] rate = {0.03, 0.06, 0.10};
        for (double r : rate) {
            double ani = Math.log(2) / Math.log1p(r);
            System.out.printf("La %.0f%% pe an: %.1f ani%n", r * 100, ani);
        }
        System.out.println(Math.log(1 + 1e-17) + " vs " + Math.log1p(1e-17));
    }
}

Rezultat

La 3% pe an: 23.4 ani
La 6% pe an: 11.9 ani
La 10% pe an: 7.3 ani
0.0 vs 1.0E-17

Greșeli frecvente

  • Crezi că Math.log este în baza 10, ca pe calculator. În Java este logaritmul natural; pentru baza 10 folosește log10.
  • Folosești (int) Math.log10(n) + 1 pentru numărul de cifre al lui 0 sau al unui număr negativ: log10(0) este -Infinity. Tratează aceste cazuri separat.

Comenzi înrudite

  • Math.exp: exp(x) calculează eˣ; expm1(x) calculează eˣ − 1 precis chiar și pentru x foarte apropiat de 0.
  • Math.pow: Ridică un număr la o putere și returnează rezultatul ca double; exponentul poate fi și negativ sau cu zecimale.
  • Double.isNaN: Verifică dacă un double este NaN („nu este număr”), rezultatul unor calcule fără sens, ca 0.0 / 0.0.
  • Math: Clasa cu funcții matematice gata făcute: rotunjiri, puteri, radicali, trigonometrie, minim/maxim și calcule întregi sigure.