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

Уведомление

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)  | Причина: Не указана

С уважением,
Михаил Каганский

Wanna join the discussion?! Login to your Форум проекта SMath forum account. Новые регистрации запрещены.

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, Advanced Member
Зарегистрирован: 03.06.2009(UTC)
Сообщений: 156
Мужчина
Российская Федерация

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

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

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