1 страниц (4 вхождений)
Изменение приоритета унарного минуса - Сообщения
#1 Опубликовано: 26.09.2012 18:07:12
При использовании единиц измерения температуры столкнулся с тем, что
-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 Опубликовано: 27.09.2012 02:07:52
То есть получается, что сначала к 31 прибавляется 273,15, а потом подставляется знак от первого числа?
#3 Опубликовано: 27.09.2012 03:34:31
Точно.
С уважением,
Михаил Каганский
#4 Опубликовано: 27.09.2012 14:25:51
WroteПри использовании единиц измерения температуры столкнулся с тем, что
-31°C=-304,15К
Такая ошибка была и в Mathcad 15.
В Mathcad Prime ее исправили.
1 страниц (4 вхождений)
-
Новые сообщения
-
Нет новых сообщений