Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Помогите пожалуйста понять строку


Автор: Muerto 18.6.2007, 11:55
double value = номер от одного до ста / 100.0;
Код

 dB = (float) (Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);


Это для звука.

Но я не понимаю что именно происходит тут (Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);

Автор: Samotnik 18.6.2007, 12:03
это формула, кот приводиться с float, далее 
Math.long - это логарифм,  далее
если value = 0.0, то записывается 0,0001,  иначе записывается value,  далее
эта вся красота делиться на логарифм 10, а потом умножается на 20


Автор: kkorsakoff 18.6.2007, 12:04
А что именно не понятно?

формула такова

f(n)=ln(value)/ln(10)*20

Причем проверяется условие, что value не равно нулю. Если оно будет равно нулю, то результатом ln будет бесконечность (за знаком минус), и как следствие исключение.

Чтобы такого не было, происходит проверка. Если value==0.0, то оно выставляется в 0.0001.

Автор: goodday1941 18.6.2007, 12:12
Цитата(kkorsakoff @  18.6.2007,  12:04 Найти цитируемый пост)
Если оно будет равно нулю, то результатом ln будет бесконечность (за знаком минус), и как следствие исключение.

помоему эксепш не выбрасываеться... недавно пришлось поработать слегка с библиотекой Math дык он мне в случае бесконечности в стэктрейс Infinity писал  smile 

Автор: kkorsakoff 18.6.2007, 12:21
Прикольно. Возможно и так, но тогда непонятно зачем тогда наворотили проверку. Видимо от чего-то они все-таки спасалисьsmile

Автор: fixxer 18.6.2007, 14:23
Цитата(kkorsakoff @ 18.6.2007,  12:04)
формула такова

f(n)=ln(value)/ln(10)*20


Скорее даже изначальная формула

f(value)=lg(value)*20

Дело в том, что Math.log10(double) появился только в java 5. 

Автор: Muerto 18.6.2007, 15:04
Большое спасибо,я понял...

Автор: Muerto 18.6.2007, 15:20
мммм, чет не пойму,А зачем надо 
Код

 /Math.log(10.0)
 
если это  = 1 ???

Добавлено через 3 минуты и 54 секунды
написал
Код

System.out.println(Math.log(10.0));

выдало
2.302585092994046
значит мы имеем дело с логорифом у каторого внизу "E"
тоесть ln а не log ???????

Автор: chief39 18.6.2007, 15:31
Цитата(goodday1941 @  18.6.2007,  12:12 Найти цитируемый пост)
дык он мне в случае бесконечности в стэктрейс Infinity писал

Угу.


Цитата(kkorsakoff @  18.6.2007,  12:21 Найти цитируемый пост)
Видимо от чего-то они все-таки спасались

От нуля smile


ЗЫ: название темы жжот!  smile  Третье слово прочитал чуть иначе и укатился под стол smile

Автор: Metal_Heart 19.6.2007, 09:31
Цитата(Muerto @ 18.6.2007,  15:20)
мммм, чет не пойму,А зачем надо 
Код

 /Math.log(10.0)
 
если это  = 1 ???

Добавлено @ 15:24
написал
Код

System.out.println(Math.log(10.0));

выдало
2.302585092994046
значит мы имеем дело с логорифом у каторого внизу "E"
тоесть ln а не log ???????

тебе же сказали, что:
Цитата

Дело в том, что Math.log10(double) появился только в java 5. 


поэтому, используется формула приведения логарифма к произвольному основанию  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)