Изменение приоритета унарного минуса

Изменение приоритета унарного минуса - Messages

#1 Posted: 9/26/2012 6:07:12 PM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

При использовании единиц измерения температуры столкнулся с тем, что
-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
Медведев Виктор

Медведев Виктор

13 likes in 157 posts.

Group: User

То есть получается, что сначала к 31 прибавляется 273,15, а потом подставляется знак от первого числа?
#3 Posted: 9/27/2012 3:34:31 AM
Mike Kaganski

Mike Kaganski

184 likes in 434 posts.

Group: User

Точно.
С уважением, Михаил Каганский
#4 Posted: 9/27/2012 2:25:51 PM
Valery Ochkov

Valery Ochkov

55 likes in 633 posts.

Group: User

Wrote

При использовании единиц измерения температуры столкнулся с тем, что
-31°C=-304,15К


Такая ошибка была и в Mathcad 15.
В Mathcad Prime ее исправили.

  • New Posts New Posts
  • No New Posts No New Posts