Domanda

Nella nostra app, attualmente viviamo con l'eredità di una decisione di archiviare tutti i dati tecnici nel nostro database in SI.

Temo che potremmo correre il rischio di non avere sufficiente precisione e accuratezza nel nostro database o nei tipi numerici .NET. Sono anche preoccupato che potremmo vedere artefatti di matematica in virgola mobile (anche se questa è probabilmente una domanda tutta per sé).

Ad esempio, i dati di origine potrebbero essere stati una quantità di pressione espressa (e letta da un servizio di terze parti) in Psi (libbre per pollice quadrato). Gli ingegneri avranno scelto questa unità di misura perché (per la quantità espressa) ciò tenderà a fornire numeri facilmente digeribili e leggibili dall'uomo senza richiedere una notazione scientifica.

Quando 'standardizziamo' il numero, cioè quando convertiamo questa quantità per la nostra persistenza, potremmo convertirla in Pa (Pascal) che richiederà la moltiplicazione o la divisione del numero per qualche altro numero potenzialmente grande.

Spesso finiamo per memorizzare numeri molto grandi o molto piccoli e, peggio ancora, potremmo fare ulteriori calcoli su questi numeri.

Attualmente utilizziamo ORACLE float e System.Double.

Cosa ne pensa la gente?

Aggiorna

Ulteriori ricerche hanno portato alla luce Supporto unità di misura nel prossimo linguaggio F # (in CTP mentre scrivo).

Sembra che saremo in grado di far capire a F # l'input dell'utente come:

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

Saremo anche in grado di creare le nostre unità e sistemi di unità derivati.

 creando un'unità derivata per Newton in F #
(fonte:

Altri suggerimenti

Penso che fintanto che sarai in grado di memorizzare esattamente la precisione che hai in realtà, non hai motivo di preoccuparti.

Usando l'esempio che hai dato della conversione di PSI in pascal (1 PSI = 6 894,75 pa), se prendo una misura diciamo 14.7 PSI e la converto in pascal ottengo 101.352.825. È troppa precisione. Dovresti memorizzarlo come 101.000 per riflettere la reale precisione della misurazione , non del calcolo .

Tieni presente che tutti i numeri che usi per eseguire la conversione devono essere almeno precisi come le tue misurazioni in modo da non perdere precisione durante la conversione. È meglio avere più cifre di precisione (almeno un'altra in più) nei fattori di conversione che nelle misurazioni.

Penso che i dati di ingegneria di solito non siano abbastanza precisi da preoccuparsi della differenza. Conosci l'espressione dell'ingegnere & Quot; misura con un micrometro, segnalo con il gesso, taglia con un'ascia & Quot ;. Questo su riassume. Preoccuparsi della differenza tra 8 cifre significative o 12 in un calcolo su qualcosa che è costruito nel mondo reale con tolleranza di 2 cifre significative non ha senso.

Per evitare la perdita di precisione dovuta alla conversione dell'unità, è possibile memorizzare tutti i dati derivanti dalla misurazione nell'unità in cui è stata misurata. Naturalmente ciò significa che si potrebbe finire con la memorizzazione di alcuni valori di pressione in Pa, altri in Psi o persino mmHg. Devi decidere tu stesso se questo introduce più problemi di quanti ne risolva.

E sono d'accordo con le altre risposte: nella maggior parte dei casi, la precisione offerta da un galleggiante Oracle è di gran lunga superiore alla precisione della misurazione stessa.

Beh, dipende da quanto esatto vuoi essere. Ricorda che quando parli di ingegneria, non è sufficiente memorizzare il numero 3.20, perché 3.2 non è lo stesso di 3.20 quando si tratta di ingegneria. 3.20 implica una precisione superiore a 3.2, che potrebbe essere 3.15 & Lt; = x & Lt; 3.25 .

scroll top