Русскоязычный форум закрыт из-за отсутствия активности (доступен только для чтения).
Пожалуйста, пользуйтесь англоязычной его версией. Приносим извинения за неудобства
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline mikekaganski  
#1 Оставлено : 27 сентября 2012 г. 1:07:12(UTC)
mikekaganski


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Мужчина
Российская Федерация
Откуда: Khabarovsk, Russia

Сказал «Спасибо»: 130 раз
Поблагодарили: 33 раз в 29 постах
При использовании единиц измерения температуры столкнулся с тем, что
-31°C=-304,15К

Это происходит из-за того, что здесь минус имеет приоритет сложения/вычитания, т.е. ниже, чем у умножения, используемого для единиц измерения. Но унарный минус по сути является краткой записью выражения

-x=(-1)*x

т.е. к нему можно (и в данном случае нужно) использовать приоритет умножения и порядок вычисления слева направо (левоассоциативность).

Ну, и в качестве бонуса было бы неплохо в качестве частного случая проверять температуру на значения ниже абсолютного нуля. Good Можно было бы вообще ввести в синтаксис определения единиц измерения опциональное определения пределов.

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

Насчёт основного предложения:
1. Во всех (известных мне) языках программирования унарные плюс и минус имеют приоритет выше, чем у умножения/деления.
2. В языках программирования, имеющих оператор возведения в степень, его приоритет может быть как выше, так и ниже, чем у унарных плюса и минуса. Так, в Visual Basic приоритет ^ выше, чем у унарных (+-), а в VBScript - ниже. В случае, если приоритет возведения в степень выше, получится

-1^2=-1

Отредактировано пользователем 29 сентября 2012 г. 13:04:35(UTC)  | Причина: Не указана

С уважением,
Михаил Каганский
Offline kasper  
#2 Оставлено : 27 сентября 2012 г. 9:07:52(UTC)
kasper


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.05.2009(UTC)
Сообщений: 155
Мужчина
Российская Федерация
Откуда: Россия, Новочеркасск

Сказал «Спасибо»: 21 раз
Поблагодарили: 13 раз в 9 постах
То есть получается, что сначала к 31 прибавляется 273,15, а потом подставляется знак от первого числа?
Offline mikekaganski  
#3 Оставлено : 27 сентября 2012 г. 10:34:31(UTC)
mikekaganski


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Мужчина
Российская Федерация
Откуда: Khabarovsk, Russia

Сказал «Спасибо»: 130 раз
Поблагодарили: 33 раз в 29 постах
Точно.
С уважением,
Михаил Каганский
Offline OchkovVF  
#4 Оставлено : 27 сентября 2012 г. 21:25:51(UTC)
OchkovVF


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 03.06.2009(UTC)
Сообщений: 156
Мужчина
Откуда: Moscow

Сказал «Спасибо»: 3 раз
Поблагодарили: 3 раз в 3 постах
Автор: mikekaganski Перейти к цитате
При использовании единиц измерения температуры столкнулся с тем, что
-31°C=-304,15К

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

Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.