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

Asked
Viewd621

4

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

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

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

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

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

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

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

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

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

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

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

 создание производной единицы для Ньютонов в F #
(источник: )

5 ответов

6

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

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


Изменить:

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

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

  • @Treb: Согласен - разные проблемные области имеют разные требования и предположения. Иногда дело доходит до консервативных предположений или ограничения допущений о точности до наименее точных измерений.

    Ken Gentle05 декабря 2008, 13:34
  • Предполагается, что точность измерения известна. По моему опыту, зачастую это не так.

    Treb05 декабря 2008, 13:27
0

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

1

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

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

2

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

  • @Paul: ДЕРЖАЙ, я не могу отменить голос против (слишком старый) - я найду что-нибудь еще, что ты сказал, чтобы проголосовать за.

    Ken Gentle08 декабря 2008, 14:20
  • @Paul: Мы пришли к соглашению. Извините за недоразумение (+1)

    Ken Gentle08 декабря 2008, 14:19
  • @Ken - Не беспокойтесь о голосовании. В эти выходные я осуществил мечту всей жизни и обыграл Джеффа Этвуда и попал на первую страницу пользователей!

    Paul Tomblin08 декабря 2008, 18:02
  • +1, потому что вы правы: если измерение имеет относительную ошибку 1%, любая накопленная ошибка требует большого накопления, чтобы стать больше, чем это.

    Treb05 декабря 2008, 13:16
  • @Ken, вы производите расчеты с «достаточным» сигфигом (т.е. больше, чем вам нужно), а затем отбрасываете незначительные части. Так что умножение двух чисел с большей точностью, чем вам нужно, не ухудшит ваш результат, если вы отбросите ненужные части.

    Paul Tomblin05 декабря 2008, 19:40
  • -1: это определенно может иметь значение при повторных вычислениях. Конечно, это будет зависеть от предметной области, но небольшие ошибки со временем имеют кумулятивный эффект.

    Ken Gentle05 декабря 2008, 13:09
  • Возможно, я неправильно понял ваш ответ - я читал, что вы говорите: «Не беспокойтесь об этом - это не имеет значения». Включение 8 или 12 рисунков в расчет, в котором всего 2, может привести к плохим результатам, поэтому я не согласен с ответом.

    Ken Gentle05 декабря 2008, 13:25
  • @Ken G, ты явно не понимаешь точности.

    Paul Tomblin05 декабря 2008, 13:11
3

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

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

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

  • Вы должны знать, сколько значащих цифр вы храните. Тогда не имеет значения, храните ли вы 101, 101,000 или 101,000000000001, вы всегда знаете, что шесть цифр имеют значение.

    Bill the Lizard05 декабря 2008, 13:35
  • Что делать, если размер равен 101 000, но с шестью значащими цифрами? Как сохранить, что это именно 101 000, а не 101 x 10 ^ 3?

    Treb05 декабря 2008, 13:21