문제

앱에서 우리는 현재 모든 엔지니어링 데이터를 SI의 데이터베이스에 저장하기로 한 결정의 유산을 가지고 살고 있습니다.

데이터베이스 또는 .NET 숫자 유형에서 충분한 정밀도와 정확성을 가질 위험이있을 수 있다고 걱정합니다. 나는 또한 우리가 부동 소수점 수학의 유물을 볼 수 있을까 걱정하고 있습니다 (아마도 그 자체로는 질문 일 것입니다).

예를 들어, 소스 데이터는 PSI (제곱 인치당 파운드)로 표현 된 압력 수량 (일부 타사 서비스에서 읽음) 일 수 있습니다. 엔지니어들은이 측정 단위를 선택했을 것입니다. (표현되는 수량의 경우) 이것은 과학적 표기법이 필요없이 쉽게 소화되고 인간이 읽을 수있는 숫자를 제공하는 경향이 있기 때문입니다.

우리가 숫자를 '표준화'할 때, 즉, 우리가 자신의 지속성을 위해이 수량을 변환 할 때, 우리는 그것을 PA (PASCALS)로 변환 할 수 있으며, 이는 숫자를 다른 잠재적으로 많은 숫자로 곱하거나 나누어야합니다.

우리는 종종 매우 크거나 작은 숫자를 저장하게되며 더 나빠집니다.이 숫자에 대한 추가 계산을 할 수 있습니다.

현재 우리는 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) 여기서 정밀도 (숫자 수)와 스케일 (소수점 오른쪽의 숫자 숫자)을 명시 적으로 지정할 수 있습니다.

이것이 옵션이 아닌 경우,보고 및/또는 계산에 사용될 수 있도록 특정 측정의 정확도를 지속하는 것을 고려하십시오.

다른 팁

나는 당신이 실제로 가지고있는 것보다 정확하게 보관할 수있는 한, 당신은 걱정할 이유가 없다고 생각합니다.

PSI를 파스칼로 변환 한 예제 (1 PSI = 6 894.75 PA)를 사용하여 14.7 psi를 측정하고 파스칼로 변환하면 101,352.825를 얻습니다. 너무 정확합니다. 실제 정밀도를 반영하기 위해 101,000으로 저장해야합니다. 측정, 계산.

전환에 사용하는 숫자는 적어도 측정만큼 정확해야하므로 변환 중에 정밀도를 잃지 않아야합니다. 측정보다 전환 계수에서 정밀도 (적어도 하나 이상)의 숫자를 갖는 것이 가장 좋습니다.

엔지니어링 데이터는 일반적으로 차이에 대해 걱정할만큼 정확하지 않다고 생각합니다. 엔지니어의 표현은 "마이크로 미터로 측정하고 분필로 표시하고 도끼로 자릅니다"라는 것을 알고 있습니다. 그것은 그것을 요약합니다. 현실 세계에 내장 된 것에 대한 계산에서 8 개의 중요한 수치 나 12의 차이에 대해 걱정하는 것은 2 개의 중요한 수치에 대한 내용에 대한 의미가 없습니다.

단위 변환으로 인한 정밀도 손실을 피하려면 측정 된 장치의 측정에서 나오는 모든 데이터를 저장할 수 있습니다. 물론 PA에 저장된 일부 압력 값이 PSI에 저장 될 수 있습니다. 또는 MMHG. 그것이 해결하는 것보다 더 많은 문제가 발생하는지 스스로 결정해야합니다.

그리고 나는 다른 답변에 동의합니다. 대부분의 경우 Oracle Float가 제공하는 정밀도는 측정 자체의 정밀도보다 훨씬 높습니다.

글쎄, 그것은 당신이 얼마나 정확한지에 달려 있습니다. 엔지니어링에 대해 이야기 할 때보다 3.2는 엔지니어링과 관련하여 3.2와 같지 않기 때문에 3.20을 저장하는 것만으로는 충분하지 않습니다. 3.20은 3.2보다 높은 정확도를 의미합니다. 3.15 <= x <3.25.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top