Paradosso NormalizeDouble - pagina 11

 
transcendreamer:

Quello che mi preoccupa è che quando calcolo un numero frazionario, lo normalizzo, lo scrivo in una variabile, poi lo leggo e lo normalizzo di nuovo, ottengo delle code

ad esempio

basis[0]=NormalizeDouble(sum_A,2);

GlobalVariableSet("Equity-"+portfolio_id,basis[0]); 

...

current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);

text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

Ora l'ho cambiato in

text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

e non sembrano esserci code, whew, whew, whew...

Ho già scritto, lo ripeto: alcuni numeri non esistono in binario. Non c'è lo 0,1, lo 0,3 e molti altri. Non importa quante volte scriviate double val = NormalizeDouble(0.1434, 1), non otterrete mai 0.1 solo perché non esiste un tale numero.

Per esempio, i numeri sono rappresentati come segue:

0.1 = 0.100000000000000000001
0.2 = 0.2000000000001
0.3 = 0.2999999999999999999999999
0.4 = 0.400000000000002
0.6 = 0.5999999999999999998

ma
0.125 = 0.125
0.25 = 0.25
0.5 = 0.5

Se questo è molto fastidioso, è necessario arrotondare o scrivere la propria bicicletta per rappresentare i numeri frazionari (ci possono essere alcune librerie, non mi interessa) che non useranno fpu.

E nessuna coda viene aggiunta durante la conversione in stringa, ci sono inizialmente.

 
transcendreamer:

Quindi ho risolto la mia domanda, possiamo chiudere l'argomento

soluzione: dovete forzare l'arrotondamento, anche dopo la normalizzazione

Soluzione sbagliata. Quando si arrotonda, bisogna moltiplicare, arrotondare, dividere. Dopo l'ultima divisione, il numero non sarà normalizzato.
 
transcendreamer:

molto probabilmente... ma in termini di risultato finale - ci sono le code!

...

Nessuna coda dopo la normalizzazione.
 
Integer:
Non ci sono code dopo la normalizzazione.

Credo che lei stia ingannando l'uomo. Cosa significa che non ci sono code dopo la normalizzazione? Non ci possono essere code solo nella stringa che abbiamo ottenuto da un numero e arrotondato il valore (arrotondato già nella stringa, non nel doppio). Ma ci sono delle code dopo NormalizeDouble().

 
Integer:
Soluzione sbagliata. Quando si arrotonda, bisogna moltiplicare, arrotondare, dividere. Dopo l'ultima divisione il numero non sarà normalizzato.

Cosa intende per normalizzazione? Stringo diceva qui che l'algoritmo è qualcosa del genere:

double NormalizeDouble(double val, int digits)
{
    val *= 10 ^ digits
    округляем к ближайшему целому
    val /= 10 ^ digits
    return val
}
 
pavlick_:

Credo che lei stia ingannando l'uomo. Cosa significa che non ci sono code dopo la normalizzazione? Non ci possono essere code solo nella stringa che abbiamo ottenuto da un numero e arrotondato il valore (arrotondato già nella stringa, non nel doppio). Ma dopo NormalizeDouble() ci sono delle code.

Beh, se vi piace credere che io stia ingannando qualcuno, credetemi. Ho visto tutti i tipi di persone qui, non sarò sorpreso dalla vostra posizione "di principio".
 
pavlick_:

Cosa intende per normalizzazione? Stringo diceva qui che l'algoritmo è qualcosa del genere:

Sarebbe molto più interessante sapere cosa intendi per normalizzazione.
 
Integer:
Ti sto facendo una domanda specifica e tu mi stai versando acqua addosso. È abbastanza normale spiegare e argomentare il proprio punto di vista.
 
pavlick_:
Ti sto facendo una domanda specifica e tu mi stai versando acqua addosso. Come è normale spiegare e argomentare il proprio punto di vista?
Leggere i libri di testo e la documentazione ad alta voce, o cosa? O leggere il dizionario ad alta voce, sulla parola "circa"?
 
Integer:
Leggere i libri di testo e la documentazione ad alta voce o cosa? O leggere il dizionario ad alta voce, sulla parola "circa"?
È chiaro che non abbiamo niente di cui parlare. E faresti meglio a stare fuori dalle conversazioni se non sei responsabile delle tue parole.
Motivazione: