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.logeste în baza 10, ca pe calculator. În Java este logaritmul natural; pentru baza 10 foloseștelog10. - Folosești
(int) Math.log10(n) + 1pentru 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.