Как вычислить логарифмы в 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.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
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Infernal Math
Infernal Math
389 участник(ов)

http://www.zepta.ru/index.php?title=Заглавная_страница Приглашение в чат: https://t.me/matheden

comput.math
comput.math
289 участник(ов)

Прикладная математика и численные методы. Без оффтопа, рекламы, флуда. Вышмат: @higher_math Физика: @physpub Новичкам: @starter_math @JuliaLanguage @rlang_ru Книги брать здесь: libgen.io И по хештегу #book

higher.math
higher.math
234 участник(ов)

Higher mathematics / высшая математика Подборка книжек: https://ru.stackoverflow.com/a/683632/1084 Вычмат: @comput_math Физика: @physpub LaTeX: @pro_latex

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async

Starter Math
Starter Math
79 участник(ов)

Для тех, кто боится спросить в @higher_math Вычмат: @comput_math Физика: @physpub