migliorabile ha scritto:
C'e' un intero corso SEMESTRALE all'Universita' per SPIEGARE quello che non capisci.
Il corso si chiama Calcolo Numerico
Le rogne sono TANTE, MILIONI DI MILIONI, come la stella di Negroni
Ma fondamentalmente il tutto si riconduce a:
1) la rappresentazione dei numeri in floating point e' in BINARIO, e non in decimale, e certi numeri, in binario, NON SI POSSONO RAPPRESENTARE!
2) quando fai delle operazioni, ci sono SEMPRE degli errori di arrotondamento che si ACCUMULANO.
Esistono tecniche decisamente SOFISTICATE per LIMITARE (MAI OVVIARE/ELIMINARE) questo problema.
3) MAI E POI MAI (INASSOLUTO) usare un float in confronti di tipo UGUAGLIANZA, DISUGUAGLIANZA, ma SEMPRE considerare la presenza di un EPSILON in cui il numero potrebbe variare
Intanto grazie del tuo tempo poiché essere aiutati non mai dai darsi per dovuto;
Mi spiace ma informatica non mi prende io vado a fisica, che poi li i pc non servano è un altra storia infatti eccomi qui... la sintassi dei vari linguaggi mi uccide, oggi ho perso due ore perché avevo dimenticato un / 6....
Il punto 3, nel mio programma ho tenuto conto di errori dovuti a tempi di esecuzione per questo ci sono solo confronti per => e =< ma ora devo litigare con i float . Ogni variabile x bit può contenete 2^x seguendo il calcolo combinatorio perciò ci sarà una voce per il segno una po' per la posizione della virgola e tante per il numero, dimmi se sbaglio. Allora se il float è un 32bit mi pare bello spazioso, sono intenzionato a risolvere tale problema anche perché questa è un libreria necessaria ad un altro programma e deve funzionare, tenterei io di scrivere uno standard ma non saprei come spiegarlo alla macchina inoltre sono sicuro che sia già stato fatto e in modo più che eccellente. Ciò detto mi indicheresti gentilmente che cosa(Calcolo Numerico proprio tutto?) e se possibile dove studiarlo; poiché le dispense ci sono ma beccare quella giusta... altra storia
Le rogne sono TANTE, MILIONI DI MILIONI, come la stella di Negroni Apprezzata
Comunque +- 10^-6 è un errore accettabile dello stesso ordine di quelli derivati dai tempi di computazione