
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Uguale a "intCheck", ma assegnato al valore prima della funzione, come altre vars.
Quindi questo funzionerà?
Quindi questo funzionerà?
Naturalmente NO, è solo per calcoli semplici per i mercati parziali o simili con meno cifre. Niente funzionerà se più di 10 cifre contate su entrambi i lati del punto decimale insieme, limiti. Solo un giocattolo.
Non complicare troppo le cose
Se qualcosa (o qualche idea) è complicata o complessa è, credo, una questione di interpretazione individuale.
Una divisione fluttuante, un'addizione fluttuante, una conversione in int, una chiamata di funzione (copia, salto, ritorno = 3,) * 2 tutte volte due. (18) E questo supponendo che dividere e convertire siano alla pari con le altre operazioni - non lo sono.
Non ho mai voluto suggerire che la soluzione che ho creato e uso sia la più efficiente - mi rendo conto che potrebbe non esserlo, ma la cosa importante è che (1) capisco (e, in questo momento, posso tollerare) il suo overhead aggiuntivo e il costo di calcolo e (2) risolve il problema (almeno per me) di confrontare due prezzi che sono in formato a virgola mobile a doppia precisione.
In definitiva, capisco il problema inerente al confronto per l'uguaglianza di due numeri reali che sono in un formato a virgola mobile a doppia precisione, ma penso che tu ed io abbiamo affrontato il problema in un modo leggermente diverso in questo contesto. Tu usi quello che potrei chiamare un "confronto epsilon" per determinare se due doppi sono abbastanza vicini da essere intesi come uguali - cioè, se la differenza tra due doppi è entro la tua deviazione massima (Punto / 2.), allora i due doppi sono uguali. D'altra parte, ho scelto di trasformare i prezzi in ints per il confronto dividendo per Point, arrotondare al numero intero più vicino, salvare il risultato come int, e poi confrontare i due ints. Ho usato una chiamata di funzione, piuttosto che codice in linea, perché è più naturale per me - tendo a raggruppare il codice in subroutine/funzioni - e perché è potenzialmente riutilizzabile (forse da quella piccola parte di me che pensa in termini OOP). Ho preso molto da quello che hai detto il 16 febbraio 2012:
Il valore doppio dal broker potrebbe essere ovunque da 1.23457500000000 a 1.23458499999999999 ed essere ancora considerato lo stesso prezzo 1.23458.
Ecco perché ho deciso di arrotondare al numero intero più vicino invece di troncare la parte decimale dopo la divisione per Point ma prima di convertire il doppio in un int.
Tutto questo non è per dire che non sono d'accordo con quello che hai postato, piuttosto è un riconoscimento che ho rivisto quello che hai postato e lo salverò per riferimento futuro (e per un potenziale uso successivo, se necessario). :)
Come sempre, i commenti istruttivi/costruttivi sono benvenuti. :)
Se qualcosa (o qualche idea) è complicata o complessa è, credo, una questione di interpretazione individuale.
Non ho mai voluto suggerire che la soluzione che ho creato e che uso sia la più efficiente - mi rendo conto che potrebbe non esserlo, ma la cosa importante è che (1) capisco (e, in questo momento, posso tollerare) il suo sovraccarico aggiuntivo e il costo di calcolo e (2) risolve il problema (almeno per me) di confrontare due prezzi che sono in formato a virgola mobile a doppia precisione.
Sono d'accordo con te. . e sono anche d'accordo conWHRoeder
Il mio codice è stato scritto con la necessità di qualcosa da inserire nel codice esistente senza romperlo o dover passare molte ore a trovare bug, quindi ha raggiunto il suo scopo. Vorrei anche prendere in considerazione ciò cheWHRoeder ha postato almeno in parte e venire con una versione migliore di ciò che sto facendo pur mantenendolo leggibile per il mio uso. Se riesco a fare tutto questo lo posterò in questo thread.
Se riesco a fare qualcosa di tutto questo, lo posterò in questo thread.
La mia funzione Flat() era 17 volte più lenta della soluzionedi WHRoeder, ho una proposta che penso sia più leggibile e solo 3 o 4 volte più lenta, a seconda del tipo di confronto. 3 o 4 volte più lenta non è una grande cosa da ottenere ma rispetto a 17 volte più lenta è un grande miglioramento. L'ho testata un po', non ancora estensivamente.
Utilizzo:
I tipi di confronto sono EQ per uguale, NEQ per non uguale, GT per maggiore di e LT per minore di.
Semplicemente i tuoi bools
Buon punto.
Le prestazioni non sono cambiate in modo significativo.
Regole di precedenza Non (!) è quasi il massimo: quando primo != secondo esattamente, (!ABS(non zero) > nz) == (0 > nz) == falso. Se f==s allora (!0 > nz) == (1 > p/2) == vero se punto < 1
Sì, buona cattura . . .