błędy obliczeniowe w logarytmach java

0

Witam,
Mam problem z liczeniem Math.log w javie, polega na błędach już w trzecim lub czwartym miejscu po przecinku
dla sprawdzenia:

System.out.print(Math.log(0.0598));
System.out.print(Math.log(0.1254));
System.out.print(Math.log(0.1852));

problem jest dość znaczący bo przy dalszym obliczaniu wyniki różnią się od oryginału o 0.2 czasem 0.3
Ma ktoś jakiś pomysł jak to obejść lub zaimplementować inny język do samego obliczenia logarytmów?

0

U mnie jest tak:
log(0.0598) = -2.816749618025551
Zgadza się 14 cyfr.

0

To wygląda tak, jakbyś używał jakiejś dziwnej metody zaokrąglającej (np obcinająca wszystko co znajduje się X miejsc po przecinku zamiast to zaokrąglać).

0

Java zwraca -2.816749618025551, ostatnia jedynka jest poprawnie zaokrąglona w górę (gdyby dała więcej cyfr, byłoby tam 099...)

a teraz ciekawostka: https://www.google.com/search?q=log%280.0598%29 lol

0

U gugla log(x) to logarytm dziesiętny, ln(x) to logarytm naturalny, a lg(x) to logarytm dwójkowy. W java.lang.Math log(x) to logarytm naturalny, a log10(x) to logarytm dziesiętny. Trzeba to wziąć pod uwagę oczywiście.

0

Dziękuję za pomoc :) wygląda na to że tablice, których używałem do przetrzymywania tych logarytmów robią coś nie teges z liczbami.

    public static double[][] logarytm(double[][] c){
        double[][] lc = new double[2][c[0].length];
        for (int i = 0; i<c[0].length; i++){
            lc[0][i] = round(Math.log(c[0][i]));
            //System.out.print(" c"+i+":\t"+c[0][i]+"\t"+round(c[1][i])+"\t");
            lc[1][i] = Math.log(c[1][i]);
            //System.out.print("lc"+i+":\t"+round(lc[0][i])+"\t"+lc[1][i]+"\n");
        }
        return lc;
    }

zmienię trochę kodu i będzie cacy
Jak rozumiem wywoływanie funkcji dla każdej z dwóch liczb nie jest dobrym pomysłem przy 200 parach?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0