Rapidità di implementazione/ravvicinamento delle pow() funzione in C/C++

I m cercando una implementazione più veloce o una buona approssimazione di funzioni fornite da cmath.

Ho bisogno di accelerare le seguenti funzioni

  1. pow(x,y)
  2. exp(z*pow(x,y))

dove z<0. x è da (-1.0,1.0) e y è da (0.0, 5.0)

  • Stai cercando qualcosa di simile a questo? martin.ankerl.com/2007/10/04/…
  • I valori negativi di x?!? Get real, man!
  • Utilizzare inline assembler per fare questo? ma, per valori negativi di z e di x….
  • edgar.holleis: Esempio: -0.1^2.0
  • Dovrete decidere (e postare qui, se possibile), quanto per l’accuratezza e di spazio sono disposti a rinunciare per la velocità. Quanto è grande una tabella si può tenere? Qual è la relativa precisione di cui hai bisogno? Come molto di più di velocità che si deve avere?
  • che funziona solo per l’integrale valori di y. Se si dispone che il vincolo quindi un aumento di velocità è semplice. Documento questo la tua domanda.
  • Come portatile la soluzione è bisogno di essere ? Se una certa famiglia di CPU può essere assunto quindi ci può essere qualche specifico della CPU possibilità di ottimizzazione, ad esempio SIMD etc. Sarebbe anche utile sapere quanta precisione che stai cercando.
  • Sia y un tipo a virgola mobile o intero?

InformationsquelleAutor zoli2k | 2010-02-27



3 Replies
  1. 6

    Qui ci sono alcune approxmiations:

    Se il ravvicinamento per pow non è abbastanza buono, si può ancora provare a sostituirlo con funzioni esponenziali, a seconda della macchina e del compilatore potrebbe essere più veloce:

    1. x^y = e^(y*ln(x))
    2. E il risultato: e^(z * x^y) = e^(z * e^(y*ln(x)))

    Un altro trucco è quando alcuni parametri della formula non cambia spesso. Quindi, se ad esempio x e y sono per lo più costante, si può precalcolare x^y e il riutilizzo di questo.

  2. 4

    Quali sono i possibili valori di x e y?
    Se sono entro limiti ragionevoli, la costruzione di alcune tabelle di ricerca potrebbe aiutare.

    • Credo che a questa domanda si inserisce perfettamente nella domanda, nella sezione commenti, piuttosto.
    • tornando giù di voto. Penso che sia perfettamente ragionevole risposta. Se pow è un collo di bottiglia e ha una precisione giù per e-6 quindi il calcolo preliminare potrebbe essere la strada da percorrere. Faccio un sacco di tutto questo e non solo con pow.

Lascia un commento