Сегодня мы поговорим о вещественных числах. Точнее, о представлении их процессором при вычислении дробных величин. Каждый из нас сталкивался с выводом в строку чисел вида 3,4999990123 вместо 3,5 или, того хуже, огромной разницей после вычислений между результатом теоретическим и тем, что получилось в результате выполнения программного кода...
sarà, ma il problema è nella precisione data e nella convenienza di grandi costi di calcolo, il numero di doppia precisione può essere ricalcolato in qualsiasi formato:±sign - (1+mantissa/252) × 2 ordine- 1023
È facile estrarre la mantissa e l'ordine, ma non è interessante risolvere questo problema direttamente.
sarà, ma il problema è nella precisione data e nella convenienza di grandi costi di calcolo, il numero di doppia precisione può essere ricalcolato in qualsiasi formato:±sign - (1+mantissa/252) × 2 ordine- 1023
È facile isolare la mantissa e l'ordine, ma non è interessante risolvere questo problema di petto
Se la precisione è data, allora tutta questa storia non ha senso. Ho già fatto un esempio, 0,07 ha due cifre decimali. Ma se provate a calcolare il numero di cifre programmaticamente, otterrete tredici... E 0,07 non è il risultato di calcoli, ma è inserito manualmente, nemmeno attraverso una variabile.
Alexandr Sokolov: Non ho preteso di sapere tutto, meglio dirmi cosa c'è di sbagliato o mostrarmi la tua versione
Volete sapere quanti decimali sono definiti in ogni variabile di tipo double nel vostro programma. Questa è l'assurdità. Tutte le variabili di tipo double hanno la stessa rappresentazione. Sono rappresentati come Float - in virgola mobile. A volte il punto è a sinistra, a volte a destra - dipende dal valore del numero. Un milione e un milionesimo sono rappresentati con una precisione diversa.
basato su un articolo sui mozzi:https://habr.com/company/xakep/blog/257897/
non proprio testato, ma sembra funzionare
basato su un articolo sui mozzi:https://habr.com/company/xakep/blog/257897/
non proprio testato, ma sembra funzionare
Se dà il risultato corretto di 0,07 allora funziona correttamente.
Se dà il risultato corretto di 0,07 allora funziona correttamente.
non funziona ((((
non funziona ((((
E nessun algoritmo funzionerà...
E nessun algoritmo funzionerà...
sarà, ma il problema è nella precisione data e nella convenienza di grandi costi di calcolo, il numero di doppia precisione può essere ricalcolato in qualsiasi formato:±sign - (1+mantissa/252) × 2 ordine- 1023
È facile estrarre la mantissa e l'ordine, ma non è interessante risolvere questo problema direttamente.
sarà, ma il problema è nella precisione data e nella convenienza di grandi costi di calcolo, il numero di doppia precisione può essere ricalcolato in qualsiasi formato:±sign - (1+mantissa/252) × 2 ordine- 1023
È facile isolare la mantissa e l'ordine, ma non è interessante risolvere questo problema di petto
Se la precisione è data, allora tutta questa storia non ha senso. Ho già fatto un esempio, 0,07 ha due cifre decimali. Ma se provate a calcolare il numero di cifre programmaticamente, otterrete tredici... E 0,07 non è il risultato di calcoli, ma è inserito manualmente, nemmeno attraverso una variabile.
C'è anche questa opzione:
Torna in te. Questa è una sciocchezza che non dovrebbe nemmeno essere discussa seriamente.
L'autore ha semplicemente una totale incomprensione del funzionamento interno delle doppie variabili.
О!
Non ho preteso di sapere tutto, meglio dirmi cosa c'è di sbagliato o mostrarmi la tua versione
Volete sapere quanti decimali sono definiti in ogni variabile di tipo double nel vostro programma. Questa è l'assurdità. Tutte le variabili di tipo double hanno la stessa rappresentazione. Sono rappresentati come Float - in virgola mobile. A volte il punto è a sinistra, a volte a destra - dipende dal valore del numero. Un milione e un milionesimo sono rappresentati con una precisione diversa.
Esiste anche una tale variante:
No, non funzionerà, l'ho fatto ieri tramite conversione di tipo, ecco lo script, il tuo esempio e il mio:
risultati:
2018.11.13 01:49:16.131 tst (EURUSD,M30) 1. DoubleToDigits() = 11
2018.11.13 01:49:16.131 tst (EURUSD,M30) 1. Cifra() = 0
2018.11.13 01:49:16.131 tst (EURUSD,M30) 2. DoubleToDigits() = 3
2018.11.13 01:49:16.131 tst (EURUSD,M30) 2. Cifra() = 3
potete cercare su GoogleFP-Printing-PLDI96.pdf, ma dubito che qualcuno farà tutto secondo l'algoritmo