Sto cercando di diagnosticare e correggere un bug, che si riduce a X/Y ottenendo un risultato instabile quando X e Y sono piccole:come dividere piccoli numeri di doppia precisione correttamente senza errori di precisione?
In questo caso, sia cx e patharea aumentano senza intoppi. Il loro rapporto è un asintoto liscio ad alti numeri, ma irregolare per numeri "piccoli". L'ovvio primo pensiero è che stiamo raggiungendo il limite della precisione in virgola mobile, ma i numeri reali stessi non sono neanche lontanamente vicini. ActionScript "numero" tipi sono IEE 754 carri a doppia precisione, in modo da dovrebbero avere 15 cifre decimali di precisione (se ho letto bene).
Alcuni valori tipici del denominatore (patharea):
0.0000000002119123
0.0000000002137313
0.0000000002137313
0.0000000002155502
0.0000000002182787
0.0000000002200977
0.0000000002210072
E numeratore (cx):
0.0000000922932995
0.0000000930474444
0.0000000930582124
0.0000000938123574
0.0000000950458711
0.0000000958000159
0.0000000962901528
0.0000000970442977
0.0000000977984426
Ciascuno di questi cresce monotonicamente, ma il rapporto è caotico come visto sopra.
A numeri più grandi si assesta ad un'iperbole liscia.
Quindi, la mia domanda: qual è il modo corretto per gestire numeri molto piccoli quando è necessario dividerli uno con l'altro?
Ho pensato di moltiplicare numeratore e/o denominatore per 1000 in anticipo, ma non riuscivo a risolverlo.
Il codice effettivo in questione è la funzione recalculate()
here. Calcola il baricentro di un poligono, ma quando il poligono è piccolo, il baricentro salta irregolare intorno al luogo, e può finire per una lunga distanza dal poligono. La serie di dati di cui sopra sono il risultato di spostare un nodo del poligono in una direzione costante (a mano, per questo motivo non è perfettamente liscia).
Questo è Adobe Flex 4.5.
Cosa è successo quando moltiplicato per 1000, diviso, quindi diviso il risultato per 1000? – K2xL
Beh, niente di buono :) In una corrente incarnazione, ho finito con un quoziente con solo due cifre di precisione. A questo punto mi sono sentito come se stessi codificando per tentativi ed errori, quindi il mio obiettivo era ottenere un po 'di istruzione sul modo giusto di fare le cose. –
Inoltre, moltiplicheresti il numeratore o il denominatore? Credo che quest'ultimo? –