Как вычислить логарифмы в Java?

Ниже приведена формула

Процент Fat = 495/(1.0324 - 0.19077 x (LOG10 (талия-шея)) + 0.15456 x (LOG10 (высота))) - 450

Следующий мой код

import java.math.*;

public class Position
{
    static double waist=66,neck=30,height=150;

    public static void main(String[]args)
    {
        double fat = 495/( (1.0324 - 0.19077)* (Math.log(waist - neck)/Math.log(10)) + (0.15456) *  (Math.log(height)/Math.log(10))) - 450;

        System.out.println(fat);
    }
}

Ответ, который я получаю, неверен. Это должно быть 11,8% (используйте следующий http://lowcarbdiets.about.com/library/blbodyfatcalculator. htm )

Я считаю, что неправильно сделал логарифмы. Пожалуйста, помогите мне получить правильный ответ.

3
добавлено отредактировано
Просмотры: 1
de
Даже это кажется неправильным: (1.0324 - 0.19077 x (LOG10 (талия-шея))! = ((1.0324 - 0.19077) * (Math.log (талия-шея) /Math.log (10)), вы «переопределяете» умножение приоритет от исходной формулы.
добавлено автор PeterMmm, источник
Даже это кажется неправильным: (1.0324 - 0.19077 x (LOG10 (талия-шея))! = ((1.0324 - 0.19077) * (Math.log (талия-шея) /Math.log (10)), вы «переопределяете» умножение приоритет от исходной формулы.
добавлено автор PeterMmm, источник
Проверьте Javadocs. Вам нужно использовать Math.log10() . Math.log() возвращает логарифм на основе e
добавлено автор a_horse_with_no_name, источник
@eis: но исходная формула использует log10 (хотя я не знаю, правильно ли это).
добавлено автор a_horse_with_no_name, источник
@eis: но исходная формула использует log10 (хотя я не знаю, правильно ли это).
добавлено автор a_horse_with_no_name, источник
Вы можете использовать либо Math.log10 (x), поскольку @a_horse_with_no_name говорит, или Math.log (x) /Math.log (10), как вы это делаете, что эквивалентно. Я не вижу никакой ценности в последнем, поскольку первый доступен, и ближе к тому, что говорит ваша спецификация.
добавлено автор EJP, источник
Вы можете использовать либо Math.log10 (x), поскольку @a_horse_with_no_name говорит, или Math.log (x) /Math.log (10), как вы это делаете, что эквивалентно. Я не вижу никакой ценности в последнем, поскольку первый доступен, и ближе к тому, что говорит ваша спецификация.
добавлено автор EJP, источник
@a_horse_with_no_name это не повлияет на результат, хотя
добавлено автор eis, источник
@a_horse_with_no_name это не повлияет на результат, хотя
добавлено автор eis, источник

6 ответы

Вы неправильно написали код. Попробуйте:

import java.math.*;

public class Position
{
    static double waist=66,neck=30,height=150;

    public static void main(String[]args)
    {
        double fat = 495/( 1.0324
            - (0.19077 * (Math.log(waist - neck)/Math.log(10)))
            + (0.15456) * (Math.log(height)/Math.log(10))
            ) - 450;

        System.out.println(fat);
    }
}

Разница в том, что у этого нет 1.0324 - 0.19077 - исходная формула тоже не имела этого, поэтому у вас были неправильные круглые скобки.

Как отмечено @a_horse_with_no_name, Math.log() будет использовать логарифм на основе e, а не 10, но в рамках этого кода результат будет таким же. Чтобы использовать 10-based, вы должны использовать Math.log10 ().

6
добавлено

Вы неправильно написали код. Попробуйте:

import java.math.*;

public class Position
{
    static double waist=66,neck=30,height=150;

    public static void main(String[]args)
    {
        double fat = 495/( 1.0324
            - (0.19077 * (Math.log(waist - neck)/Math.log(10)))
            + (0.15456) * (Math.log(height)/Math.log(10))
            ) - 450;

        System.out.println(fat);
    }
}

Разница в том, что у этого нет 1.0324 - 0.19077 - исходная формула тоже не имела этого, поэтому у вас были неправильные круглые скобки.

Как отмечено @a_horse_with_no_name, Math.log() будет использовать логарифм на основе e, а не 10, но в рамках этого кода результат будет таким же. Чтобы использовать 10-based, вы должны использовать Math.log10 ().

6
добавлено

Вывод журнала корректен, но вы скопировали некоторые скобки.

double fat = 495/( 1.0324 - 0.19077* (Math.log(waist - neck)/Math.log(10)) + (0.15456) *  (Math.log(height)/Math.log(10))) - 450
2
добавлено

Вывод журнала корректен, но вы скопировали некоторые скобки.

double fat = 495/( 1.0324 - 0.19077* (Math.log(waist - neck)/Math.log(10)) + (0.15456) *  (Math.log(height)/Math.log(10))) - 450
2
добавлено
495/(1.0324 - 0.19077 x

и это

495/( (1.0324 - 0.19077)*

не совпадает

1
добавлено
495/(1.0324 - 0.19077 x

и это

495/( (1.0324 - 0.19077)*

не совпадает

1
добавлено