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

Изменение приоритета унарного минуса - Сообщения

#1 Опубликовано: 26.09.2012 18:07:12
Mike Kaganski

Mike Kaganski

184 сообщений из 434 понравились пользователям.

Группа: User

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

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

13 сообщений из 157 понравились пользователям.

Группа: User

То есть получается, что сначала к 31 прибавляется 273,15, а потом подставляется знак от первого числа?
#3 Опубликовано: 27.09.2012 03:34:31
Mike Kaganski

Mike Kaganski

184 сообщений из 434 понравились пользователям.

Группа: User

Точно.
С уважением, Михаил Каганский
#4 Опубликовано: 27.09.2012 14:25:51
Valery Ochkov

Valery Ochkov

55 сообщений из 633 понравились пользователям.

Группа: User

Wrote

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


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

  • Новые сообщения Новые сообщения
  • Нет новых сообщений Нет новых сообщений