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
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:
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.
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:
doubleNormalizeDouble(double val, int digits)
{
val *= 10 ^ digits
округляем к ближайшему целому
val /= 10 ^ digits
return val
}
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".
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.
Quindi ho risolto la mia domanda, possiamo chiudere l'argomento
soluzione: dovete forzare l'arrotondamento, anche dopo la normalizzazione
molto probabilmente... ma in termini di risultato finale - ci sono le code!
...
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().
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:
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.
Cosa intende per normalizzazione? Stringo diceva qui che l'algoritmo è qualcosa del genere:
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"?