1 Pages (4 items)
Изменение приоритета унарного минуса - Messages
#1 Posted: 9/26/2012 6:07:12 PM
При использовании единиц измерения температуры столкнулся с тем, что
-31°C=-304,15К
Это происходит из-за того, что здесь минус имеет приоритет сложения/вычитания, т.е. ниже, чем у умножения, используемого для единиц измерения. Но унарный минус по сути является краткой записью выражения
[MATH]-x=(-1)*x[/MATH]
т.е. к нему можно (и в данном случае нужно) использовать приоритет умножения и порядок вычисления слева направо (левоассоциативность).
Ну, и в качестве бонуса было бы неплохо в качестве частного случая проверять температуру на значения ниже абсолютного нуля.
Можно было бы вообще ввести в синтаксис определения единиц измерения опциональное определения пределов.
(Update)
Предыдущее предложение, пожалуй, не обдумано. Величины с размерностью "температура" могут содержать не только значения температур, но и значения температурных градиентов, которые, естественно, могут быть выражены отрицательным числом кельвинов
Насчёт основного предложения:
1. Во всех (известных мне) языках программирования унарные плюс и минус имеют приоритет выше, чем у умножения/деления.
2. В языках программирования, имеющих оператор возведения в степень, его приоритет может быть как выше, так и ниже, чем у унарных плюса и минуса. Так, в Visual Basic приоритет ^ выше, чем у унарных (+-), а в VBScript - ниже. В случае, если приоритет возведения в степень выше, получится
[MATH]-1^2=-1[/MATH]
-31°C=-304,15К
Это происходит из-за того, что здесь минус имеет приоритет сложения/вычитания, т.е. ниже, чем у умножения, используемого для единиц измерения. Но унарный минус по сути является краткой записью выражения
[MATH]-x=(-1)*x[/MATH]
т.е. к нему можно (и в данном случае нужно) использовать приоритет умножения и порядок вычисления слева направо (левоассоциативность).

(Update)
Предыдущее предложение, пожалуй, не обдумано. Величины с размерностью "температура" могут содержать не только значения температур, но и значения температурных градиентов, которые, естественно, могут быть выражены отрицательным числом кельвинов

Насчёт основного предложения:
1. Во всех (известных мне) языках программирования унарные плюс и минус имеют приоритет выше, чем у умножения/деления.
2. В языках программирования, имеющих оператор возведения в степень, его приоритет может быть как выше, так и ниже, чем у унарных плюса и минуса. Так, в Visual Basic приоритет ^ выше, чем у унарных (+-), а в VBScript - ниже. В случае, если приоритет возведения в степень выше, получится
[MATH]-1^2=-1[/MATH]
С уважением,
Михаил Каганский
#2 Posted: 9/27/2012 2:07:52 AM
То есть получается, что сначала к 31 прибавляется 273,15, а потом подставляется знак от первого числа?
#3 Posted: 9/27/2012 3:34:31 AM
Точно.
С уважением,
Михаил Каганский
#4 Posted: 9/27/2012 2:25:51 PM
WroteПри использовании единиц измерения температуры столкнулся с тем, что
-31°C=-304,15К
Такая ошибка была и в Mathcad 15.
В Mathcad Prime ее исправили.
1 Pages (4 items)
-
New Posts
-
No New Posts