Frage

In unserer App haben wir zur Zeit mit dem Erbe einer Entscheidung leben alle Engineering-Daten in unserer Datenbank in SI zu speichern.

Ich mache mir Sorgen, dass wir das Risiko nicht mit ausreichender Präzision und Genauigkeit in unserer Datenbank oder in .NET numerischen Typen ausgeführt werden können. Ich bin besorgt, dass wir Artefakte von Gleitkommazahlen Mathematik sehen kann (obwohl das wahrscheinlich eine Frage an sich ist alles).

Zum Beispiel haben die Quelldaten können ein Druckmenge ausgedrückt worden (und gelesen von einem 3rd-Party-Service in) in Psi (Pfund pro Quadratzoll). Die Ingenieure werden diese Maßeinheit gewählt haben, weil sie (für die Menge ausgedrückt) diese leicht verdaulichen, für Menschen lesbaren Zahlen geben wird dazu neigen, ohne die wissenschaftliche Schreibweise erforderlich ist.

Wenn wir die Zahl ‚standardisieren‘, das heißt, wenn wir diese Menge für unsere eigene Persistenz umwandeln, könnten wir es zu Pa konvertieren (Pascal), die entweder Multiplizieren oder Dividieren der Zahl durch eine andere potenziell große Zahl benötigen.

Wir am Ende oft sehr große oder sehr kleine Zahlen zu speichern, und schlimmer noch - wir weitere Berechnungen auf diesen Zahlen tun könnten

.

Derzeit verwenden wir ORACLE Schwimmer und System.Double.

Was denken die Leute davon?

UPDATE

Weitere Forschung ausgegraben hat? Maßeinheiten Unterstützung in der bevorstehenden # -Sprache F (in CTP, wie ich schreibe).

Es scheint, wir werden in der Lage sein, F # Benutzereingabe zu haben verstehen, wie:

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

Wir werden auch unsere eigenen abgeleiteten Einheiten und Einheitensysteme erstellen können.


(Quelle: msdn.com )

War es hilfreich?

Lösung

Halt signifikante Zahlen im Auge - die Genauigkeit der Messung. Wenn der PSI nur ganze Pfunde bekannt ist, dann nach der Umwandlung in Pa gibt es 15 Dezimalstellen, gibt es noch nur eine bedeutende Figur ist.

Precision unterscheidet sich von Genauigkeit und Durchführen Punktoperationen auf technischen Einheiten schwimmend müssen diese während der Operationen berücksichtigen - speichern nicht mehr Präzision als die Genauigkeit der Messung nicht mehr Präzision in einer Berechnung verwenden als bekannt ist.


Edit:

Sie könnten auch erwägen mit NUMERIC(p,s) wo die Genauigkeit (Anzahl der Ziffern) und Skala (Anzahl der Ziffern rechts vom Komma) kann explizit angegeben werden.

Wenn das nicht möglich ist, prüfen die Genauigkeit für eine bestimmte Messung persistierenden, so dass es berichtet und / oder in Berechnungen verwendet werden können.

Andere Tipps

Ich denke, solange man genau so viel Präzision zu speichern sind in der Lage, wie Sie tatsächlich haben, haben Sie keinen Grund zur Sorge.

das Beispiel Verwenden Sie zur Umwandlung von PSI gab Pascal (1 PSI = 6 894,75 pa), Wenn ich eine Messung nehmen von 14,7 PSI sagen und wandeln es in Pascal I 101,352.825 bekommen. Das ist zu viel Präzision. Sie müssen speichern, dass als 101.000 die wirkliche Genauigkeit der Messung zu reflektieren , nicht die Berechnung .

Beachten Sie, dass alle Zahlen, die Sie verwenden Umwandlung tun müssen, zumindest so genau wie Ihre Messungen, so dass Sie Präzision nicht verlieren während der Konvertierung. Am besten ist es mehr Stellen an Präzision haben (mindestens einer) in den Umrechnungsfaktoren als in Ihren Messungen.

ich glaube, Engineering-Daten in der Regel nicht präzise genug ist, um den Unterschied zu kümmern. Sie kennen den Ausdruck „Maßnahme mit einem Mikrometer, markieren Sie es mit Kreide, mit einer Axt geschnitten“ des Ingenieurs. Das etwa bringt es auf. Ich Gedanken über den Unterschied zwischen 8 signifikanten Zahlen oder 12 in einer Berechnung auf etwas, das einfach keinen Sinn in der realen Welt zu 2 signifikanten Zahlen Toleranz gebaut wird.

Genauigkeitsverlust zu vermeiden, aufgrund Einheitenkonvertierung, können Sie alle Daten speichern, die in der Einheit aus Messung kommt, dass es in gemessen. Das bedeutet natürlich, dass Sie mit einigen Druckwerte können am Ende in Pa gespeichert werden, andere in Psi oder sogar mmHg. Sie müssen selbst entscheiden, ob das mehr Probleme bringt, als sie löst.

Und ich stimme mit den anderen Antworten: In den meisten Fällen die Präzision von einem Oracle-Schwimmer angeboten weit höher als die Genauigkeit der Messung selbst

.

Nun, es hängt davon ab, wie genau wollen Sie sein. Denken Sie daran, als wenn man über Technik reden, reicht es nicht nur zu speichern, die Zahl 3,20, weil 3.2 nicht das gleiche wie 3,20 ist, wenn es um Technik geht. 3.20 impliziert eine höhere Genauigkeit als 3,2, was sein könnte, 3,15 <= x <3,25 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top