В каких единицах измерения вы бы хранили инженерные данные?

StackOverflow https://stackoverflow.com/questions/343732

Вопрос

В нашем приложении мы в настоящее время живем с унаследованным решением хранить все инженерные данные в нашей базе данных в формате SI.

Я беспокоюсь, что мы можем столкнуться с риском отсутствия достаточной точности в нашей базе данных или в числовых типах .NET.Я также обеспокоен тем, что мы можем увидеть артефакты математики с плавающей запятой (хотя это, вероятно, вопрос сам по себе).

Например, исходными данными могли быть величины давления, выраженные (и считанные из какого-либо стороннего сервиса) в фунтах стерлингов на квадратный дюйм.Инженеры выбрали эту единицу измерения, потому что (для выражаемого количества) это, как правило, дает легко усваиваемые, понятные человеку числа, не требующие научного обозначения.

Когда мы "стандартизируем" число, т.е.когда мы преобразуем это количество для нашей собственной сохраняемости, мы могли бы преобразовать его в Pa (паскали), что потребует либо умножения, либо деления числа на какое-либо другое потенциально большое число.

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

В настоящее время мы используем ORACLE float и System.Double.

Что люди думают об этом?

Обновить

Дальнейшие исследования выявили Поддержка единиц измерения на готовящемся языке F # (в CTP, как я пишу).

Похоже, мы сможем заставить F # понимать пользовательский ввод, такой как:

9.81<n/s^2> // an acceleration

Мы также сможем создавать наши собственные производные устройства и системы устройств.

creating a derived unit for Newtons in F#
(источник: msdn.com)

Это было полезно?

Решение

Держать значимые цифры имейте в виду - точность измерения.Если PSI известен только для целых фунтов стерлингов, то после преобразования в Pa, состоящих из 15 десятичных знаков, остается только одна значащая цифра.

Точность отличается от безошибочности, и при выполнении операций с плавающей запятой над инженерными единицами необходимо учитывать это во время выполнения операций - не сохраняйте больше точности, чем точность измерения, не используйте при вычислении большую точность, чем известно.


Редактировать:

Вы также могли бы рассмотреть возможность использования NUMERIC(p,s) где точность (количество цифр) и масштаб (количество цифр справа от десятичной дроби) могут быть заданы явно.

Если это невозможно, рассмотрите возможность сохранения точности для конкретного измерения, чтобы о ней можно было сообщать и / или использовать в расчетах.

Другие советы

Я думаю, пока вы можете сохранять ровно столько точности, сколько у вас есть на самом деле, у вас нет причин для беспокойства.

Используя приведенный вами пример преобразования фунтов на квадратный дюйм в паскали (1 фунт на квадратный дюйм = 6 894,75 па), если я измерю, скажем, 14,7 фунтов на квадратный дюйм и преобразую его в паскали, я получу 101 352,825.Это слишком большая точность.Вам нужно было бы сохранить это значение как 101 000, чтобы отразить реальную точность измерение, а не тот расчет.

Имейте в виду, что любые цифры, которые вы используете для преобразования, должны быть по крайней мере такими же точными, как ваши измерения, чтобы вы не теряли точность во время преобразования.Лучше всего иметь больше цифр точности (по крайней мере, на одну больше) в ваших коэффициентах пересчета, чем в ваших измерениях.

Я думаю, что инженерные данные обычно недостаточно точны, чтобы беспокоиться о разнице.Вы знаете выражение инженера "измерьте микрометром, отметьте мелом, вырежьте топором".Это примерно подводит итог.Беспокоиться о разнице между 8 значащими цифрами или 12 при вычислении чего-либо, что построено в реальном мире с допуском на 2 значащие цифры, просто не имеет смысла.

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

И я согласен с другими ответами:В большинстве случаев точность, обеспечиваемая Oracle float, намного выше, чем точность самого измерения.

Ну, это зависит от того, насколько точным вы хотите быть.Помните, что, когда речь заходит об инженерии, недостаточно просто запомнить число 3.20, потому что 3.2 - это не то же самое, что 3.20, когда дело доходит до инженерии.3.20 подразумевает более высокую точность, чем 3.2, которая может быть 3.15 <= x < 3.25.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top