Velocità di esecuzione delle funzioni ceil(),round(),floor() - pagina 7

 
Andrey Kisselyov:

Prendiamo come esempio:
se cambiate anche il bitness della macchina, passate a 64 bit e la precisione della macchina è aumentata, la vostra formula smetterà di funzionare perché la precisione della macchina sarà molto più alta di quella che avete impostato nel vostro errore.

Con rispetto.

P.S. ci possono essere altre opzioni in cui la vostra formula fallirà su un intervallo di numeri. regolando costantemente l'errore dal passaggio a una macchina diversa, o cambiamenti nel compilatore, di cui non siete informati, o quando cambiate la rappresentazione dei numeri nella macchina, o dal taglio di una parte frazionaria del numero quando compilate una nuova versione del terminale... Non sai cosa cambierà, non credo sia una buona idea fare un IF o soffrire per indovinare cosa succederà scrivendo l'errore più e più volte...

Penso che ci sia molto da pensare.


Non sono d'accordo. La formula(y=(int)(x+0.99999999999999999997);) non smetterà di funzionare quando si aumenta la precisione, funzionerà allo stesso modo. Come prima, l'errore si verificherà nell'intervallo della parte frazionaria del numero tra DBL_EPSILON (il valore attuale: 0,00000000000002222204460492503131) e 0,00000000000003. Anche se DBL_EPSILON diminuisce a zero (cosa che ovviamente non può), l'intervallo aumenterà della dimensione dell'attuale DBL_EPSILON, cioè di 2,2204460492503131e-016. Credo che si possa anche ignorare una tale gamma di errori.

E comunque cos'è il termine "precisione della macchina". Ci sono precisioni standardizzate come il doppio e altri tipi. Il tuo ragionamento non conta. Non dirò nulla su P.S.)) Ho paura di offendere.

Con rispetto.

 
Nikolai Semko:

Non sono d'accordo. La formula(y=(int)(x+0.99999999999999999997);) non smetterà di funzionare quando si aumenta la precisione, funzionerà allo stesso modo. Come prima, l'errore si verificherà nell'intervallo della parte frazionaria del numero tra DBL_EPSILON (il valore attuale: 0,00000000000002222204460492503131) e 0,00000000000003. Anche se DBL_EPSILON diminuisce a zero (cosa che ovviamente non può), l'intervallo aumenterà della dimensione dell'attuale DBL_EPSILON, cioè di 2,2204460492503131e-016. Credo che si possa anche ignorare una tale gamma di errori.

E comunque cos'è il termine "precisione della macchina". Ci sono precisioni standardizzate come il doppio e altri tipi. Il tuo ragionamento non conta. Non dirò nulla su P.S.)) Ho paura di offendere.

Con rispetto.

Quando si applica ai prezzi nel mercato, si può generalmente lasciare la precisione a 5-6 cifre, e dal momento che si sta lavorando in matematica e non si sa chi e cosa avranno bisogno del vostro nuovo calcolo veloce, si dovrebbe applicare il "principio del comportamento sciocco" secondo il quale non importa chi e quando può mettere quel valore dove la funzione sarà sbagliato nei calcoli.

Rispetta te stesso, chiunque può sporcarti la faccia, vale la pena dare a un avversario un motivo per farlo essendo scortese? Siamo tutti evoluti in qualcosa, mentre altre cose sono semplicemente non interessanti o non importanti per noi.
Dato che stiamo parlando di assemblatore e di quello che immaginate succeda al codice dopo il compilatore, vi dirò alcune frasi che potreste capire.

Poiché un processore ha un numero limitato di bit in ogni registro, l'aggiunta e la sottrazione o qualsiasi altra operazione in quei registri ha alcuni aspetti complicati quando si tratta di flag.
Come qualcuno che ha lavorato in assembler dovresti capire di cosa stiamo parlando.
quindi dimmi al comando ADD su diversi modelli del processore se ci sarà un overflow, se si scrive codice su linguaggio assembly utilizzando lo stesso numero su diversi modelli e in generale non può adattarsi in qualsiasi registro e sarà troncato, da 8 bit ultima generazione a 64 bit e più generazione attuale e come può cambiare in futuro (lo sviluppo tecnologico è così fugace, è passato appena 40 anni, e abbiamo già un processori multi-core invece di una lampada primi anni 80)?

il mio rispetto.
 
È meglio aprire il profiling e vedere dove l'esecuzione del tuo codice è lenta, e ovviamente non si tratta di funzioni matematiche. La maggior parte sono loop, tutti i tipi di query e così via. le funzioni matematiche sono tra le più veloci e cercare di tagliare qualcosa lì non è molto intelligente per me.

Con rispetto.
 
Nikolai Semko:

Va bene, signori, avete espresso il vostro punto di vista. Cambierò la funzione ceil per te:

Questa variante è più lenta del 25-50% rispetto alla variante:y=(int)(x+0.999999999999999997); ma è massimamente corretta, funziona per gli interi negativi ed è 3 volte più veloce di ceil(x).

Ma io, come comune e fallito, userò la variante con i nove, perché considero tutti i vostri argomenti noiosi e per me, uno che ha programmato in assembler per molto tempo, e quindi sa cosa succede al codice dopo la compilazione, è troppo - mettere controlli dove si può fare a meno.

Passare alle personalità significa tradizionalmente una mancanza di argomenti sul merito. Ma ti faccio comunque una domanda. Cosa vi ha spinto a ridurre il tempo di un milione di arrotondamenti da 8 a 5 o 2 millisecondi? Qual era il carico reale del processore se anche questi ritardi si rivelavano un collo di bottiglia? Non ho incontrato alcuna necessità del genere. Forse era qualcosa di astratto, di interesse accademico?
 
Vladimir:
Andare sul personale ha tradizionalmente significato una mancanza di argomenti sostanziali.

Sono d'accordo, così come una mancanza di comportamento culturale, nel tentativo di umiliare l'altra persona.

Con rispetto.

 
Andrey Kisselyov:
Per quanto riguarda il "nessun credito", non ho dato una valutazione dei tuoi argomenti e non sminuire i tuoi meriti, come ti auguro. Rispettare se stessi, strofinare la faccia nella sporcizia può chiunque, se per dare il tuo avversario una ragione per farlo, chiedendo la maleducazione dalle loro azioni? tutti abbiamo sviluppato in qualcosa, e che siamo solo non interessati o non rilevante per noi.
Vladimir:
Andare per personalità significa tradizionalmente una mancanza di argomenti nel merito.
Andrey Kisselyov:

Sono d'accordo, così come la mancanza di comportamento culturale nel cercare di umiliare l'interlocutore.

Wow! Mi scuso certamente se ho offeso qualcuno. Devi esserti offeso per quello che ho detto:

Nikolai Semko:

Va bene, signori degli onori, è deciso. Sto cambiando la funzione ceil solo per te:

Ma io stesso, come comune e studente di C, userò la variante con i nove, perché considero tutti i vostri argomenti come nerd...

NikolaiSemko:

E comunque cos'è il termine "precisione della macchina". C'è una precisione standardizzata come il doppio e altri tipi. Il tuo ragionamento non conta. Non dirò nulla su P.S.)) Ho paura di offendere.

Beh, sai... Penso che lei abbia una ricca immaginazione. Nelle normali battute amichevoli si vede "trasferimento alla personalità", "tentativo di umiliare l'interlocutore", "sminuire i meriti"...

O mi sono perso qualcosa, e da qualche altra parte ho superato i limiti della decenza?

Scusa, Andrew, ma a quanto pare non ho abbastanza conoscenze ed esperienze per capire quello che hai scritto in quel P.S.:

Andrey Kisselyov:
P.S. ci possono essere altre varianti, quando la vostra formula fallisce su una gamma di numeri. errore di regolazione costante dovuto al passaggio a una macchina diversa, o cambiamenti nel compilatore, di cui non siete informati, o cambiamenti nella rappresentazione dei numeri sulla macchina, o taglio dellaparte frazionaria del numero quando si compila in nuove versioni del terminale... Non so cosa può cambiare, non credo sia una buona idea fare IF o soffrire per indovinare cosa succederà scrivendo un errore più e più volte...
Sarei molto grato se qualcuno potesse spiegare il significato di ciò che ho scritto.
Ancora una volta, mi scuso per il mio tono. Sostengo sempre il rispetto reciproco tra colleghi e un comportamento corretto. Il diavolo è nella mia mente.
 
Vladimir:
Cosa vi ha spinto a ridurre il tempo di arrotondamento del milione da 8 a 5 o 2 millisecondi? Qual era il vero peso del processore se anche questi ritardi si rivelavano un collo di bottiglia? Non ho incontrato alcuna necessità del genere. Forse è qualcosa di astratto, di interesse accademico?
Andrey Kisselyov:
È meglio aprire il profiling e vedere dove il tuo codice è in ritardo, e ovviamente non si tratta di funzioni matematiche. Per lo più si tratta di loop, query varie e così via. Le funzioni matematiche sono tra le più veloci e cercare di tagliare qualcosa lì non è molto intelligente, penso.
Non so perché pensi che io sia lento. Al contrario, penso che i miei algoritmi siano i più veloci. Sono solo un po' un maniaco della velocità. Naturalmente, l'uso di una tale sostituzione alternativa della funzione di arrotondamento dà un guadagno molto piccolo, solo frazioni di percentuale. Ma come dice il proverbio, dal mondo intero. Questo è anche il caso, per esempio, dell'aeronautica e della scienza dei razzi. Nella lotta per ridurre il peso senza compromettere la resistenza, tutto viene modificato, anche i bulloni. Forse questa è una delle ragioni per cui, contrariamente alla logica, oggi gli aerei sono il mezzo di trasporto più sicuro.
 
Nikolai Semko:

Wow! Mi scuso certamente se ho offeso qualcuno. Devi esserti offeso per quello che ho detto:

Beh, sai... Credo che lei abbia una fervida immaginazione. In una semplice battuta amichevole si vedono "personalità", "tentativi di umiliare", "sminuire"...

Se ti permetti di "ridicolizzare" i tuoi amici, non hai amici, hai intorno a te dei pagliacci di cui a volte ridi e non dai valore alla loro amicizia e opinione.

Nikolai Semko:

O mi sono perso qualcosa, e da qualche altra parte ho superato i limiti della decenza?

Non sono tuo amico, fratello o anche persona vicina per poterti dare un qualche tipo di valutazione, tanto più PUBBLICAMENTE.

Nikolai Semko:
Scusa, Andriy, solo che apparentemente non ho abbastanza conoscenza ed esperienza per capire quello che hai scritto in quel P.S.: ti sarei molto grato se qualcuno potesse spiegarmi il significato di quello che hai scritto.

Il significato di ciò che è scritto in P.S., che non riuscite a capire per qualche motivo è ovvio, non sapete come si svilupperà la tecnica con cui usate le vostre formule veloci, non sapete come si svilupperà la piattaforma, non sapete cosa verrà aggiunto successivamente al compilatore e come verranno rappresentati i numeri nello spazio dei registri del processore, non ne sapete nulla e introdurre una costante, dicendo che risolverà tutto positivamente e sempre, è, per così dire, illusione.

Se tieni conto che la tua formula sarà presa da altre persone del forum e potrebbero metterla in C o Pascal o altro, devi tenere conto anche di questi punti, la matematica non ha limiti né sulla piattaforma né sul linguaggio di programmazione.

Nikolai Semko:
Ancora una volta mi scuso per il mio tono. Sostengo sempre il rispetto reciproco tra colleghi e la correttezza del comportamento. Ho esagerato.

Scuse accettate. non rifaccia gli stessi errori, altrimenti le sue parole sono spazzatura senza senso.

Con rispetto.

 
Nikolai Semko:
Non so cosa ti faccia pensare che io sia lento. Al contrario, penso che i miei algoritmi siano i più veloci. Sono solo un po' un maniaco della velocità. Naturalmente, l'uso di una tale sostituzione alternativa della funzione di arrotondamento dà un guadagno molto piccolo, solo frazioni di percentuale. Ma come dice il proverbio, dal mondo intero. Questo è anche il caso, per esempio, dell'aeronautica e della scienza dei razzi. Nella lotta per ridurre il peso senza compromettere la resistenza, tutto viene modificato, anche i bulloni. Forse questa è una delle ragioni per cui oggi gli aerei sono il mezzo di trasporto più sicuro, contrariamente alla logica.
Sono a favore di un approccio sensato alla programmazione, dove si può accelerare non contro la logica, è meglio farlo, ma qualsiasi "malattia" deve essere curata, in quanto è un'aberrazione da un modo di vivere sano.

Con rispetto.
 
Andrey Kisselyov:

Se ti permetti di "STUDIARE" i tuoi amici, non hai amici, hai dei pagliacci intorno a te che a volte prendi in giro e non dai valore alla loro amicizia e opinione.

Sembra che Nikolai avesse ragione sui nerd ))

Personalmente, non ho visto alcun riferimento personale lì. E tu hai un sacco di lettere nei tuoi post, ma tutto è fuori tema e sembra che tu stia discutendo solo per il gusto di discutere.