И все бы хорошо, но с ними возникли новые несуразности, которые не всплывали ранее:
1. Пишем -20 дБВ, жмем Enter и получаем в ответ ругань:
Лог. единицы измерения допустимы только для положительных действительных значений
Ларчик открывается просто: у оператора присвоения размерности приоритет самый высокий, поэтому выражение по сути такое: -(20 дБВ) - сначала формируется величина 20 дБВ, а потом берется попытка изменить ему знак. 20 дБВ преобразуется в вольты - 10 В - берется обратный знак - (-10 В) - и производится попытка записать это отрицательное число в децибелах, и тут-то оно и выскакивает.
Приходится в таких ситуацих писать (-20) дБВ, тогда мы получим желаемый 0.1 В. Если хочется, чтобы и верхее выражение имело обычный смысл, надо поменять приоритет операторов.
[Spoiler (click to open)]
Ставим унарному минусу приоритет выше, чем оператору присвоения размерности. У оператора возведения в степень приоритет должен быть еще выше, чтобы -5^2 давало -25, иначе выражение будет воспринято как (-5)^2 = 25. В принципе, это и неплохо, теперь мы можем написать 5^2 м, и это будет означать (5^2) м, а не 5^(2 м) как раньше, что сразу выдавало ошибку - возведение в размерную степень.
Вроде бы не вижу противоречий - можно и сделать. Надо только помнить, что теперь не всегда A-B будет означать то же самое, что A + (-B), т.е 1 V - 20 dBV даст -9 V, а 1 V + (-20 dBV) даст 1.1 V.
2. как быть с безразмерными децибелами? По идее, они должны по-разному воздействовать на амплитуды и на мощности, т.е 1 В * 20 дБ должен стать равен 10 В (мощность увеличилась в 100 раз - на 20 дБ, а напряжение значит лишь в 10 раз), а 1 Вт * 20 дБ будет 100 Вт. Тут могут быть еще вольты на метр, ватты на квадратный метр, паскали, джоули и пр.
[Все сложно]Этим мы открываем ящик Пандоры: пропадает сразу коммутативность, ассоциативность операций (это еще ладно), а что еще хуже - инвариантность к смене представления величины. До сих пор у меня можно было на любом этапе заменить вольты на микровольты, метры на футы, кельвины на цельсии и т.д., и получить тот же самый ответ, что и должно быть - величины-то одни и те же, мы просто по-разному их записываем! Тут же 10 будет и в Африке 10, а вот стоит ее представить в децибелах - сразу возникает вопрос - а 10 - это сколько децибел, 10 или 20?
Мы можем избавиться от новых неоднозначностей, если заявим - безразмерные децибелы вообще нельзя преобразовать в "разы", это "две большие разницы", как раз тем, что 2 раза одинаково действует на вольты и ватты, а 3 дБ - по-разному.
Либо самый простой вариант: мы не жадничаем и вводим две величины типа dB{ampl} и dB{power}, так что
A dB{ampl} = 20 log10(A),
A dB{power} = 10 log10(A),
и применяем ровно ту, которая нужна.
Даже странно, что эти вещи так и не были как следует формализованы.