Ho eseguito alcune verifiche sul fatto che x * x o Math.pow (x, 2) sia più veloce in Java. Mi aspettavo che x * x fosse un po 'più veloce, tuttavia, si è scoperto che si trattava di un equaly veloce. Qualcuno può illuminarmi, com'è possibile, per favore?x * x vs Math.pow (x, 2) prestazioni java
risposta
Per quello che sai è JITted (o anche già in fase di compilazione) fino alla stessa identica cosa. Questi tipi di micro-benchmark raramente danno risultati molto utilizzabili, poiché non esiste un contesto reale.
Non è sicuramente un motivo preferire uno rispetto all'altro, poiché il codice del mondo reale ha raramente una semplice operazione x^2
come hotspot delle prestazioni.
L'implementazione interna di Math.pow()
è delegata a una funzione nativa in modo che potrebbe essere ragionevole per una buona prestazione. In ogni caso per avere risultati di test validi è necessario testare l'ora in un ciclo per avere un tempo di esecuzione realistico.
Grazie per la risposta! L'ho effettivamente testato in un ciclo con miliardi di iterazioni per ottenere risultati decenti .. –
come è possibile, si prega di
Perché Math.pow
è JVM intrinseca, cioè, JIT-compilatore inline la chiamata. Inoltre, quando vede che l'esponente è una costante 2
, sostituisce la chiamata con esattamente x*x
.
- 1. virgola mobile Java vs C: "x * x" differisce da "pow (x, 2)"?
- 2. Per ogni x ... Prossimi vs. Per ogni x ... Avanti x
- 3. Semplificare if (x == 1 || x == 2)
- 4. JavaScript if (x) vs if (x == true)
- 5. x, y = getPos() vs. (x, y) = getPos()
- 6. 'dichiarare -A x' vs 'dichiarare -A x =()'
- 7. Applicazione Java Windows vs Mac OS X
- 8. `X x = x = X();` legale C++?
- 9. serie NumPy, differenza tra una/= x vs. a = a/x
- 10. Perché x ++ - + - ++ x legale ma x +++ - +++ x non lo è?
- 11. Perché x ** 3 è più lento di x * x * x?
- 12. Cosa fa var x = x || {};
- 13. std :: string x (x);
- 14. Cosa significa x [x <2] = 0 in Python?
- 15. Qual'è la funzione inversa di x XOR (x/2)?
- 16. Perché è (1/2) * x diverso da 0,5 * x?
- 17. Prepararsi a convertire da Python 2.x a 3.x
- 18. WPF DataTemplate - x: Key vs DataType = "{x: Type XXXX")
- 19. X-Tag di Microsoft vs X-Tag di Mozilla
- 20. polimorfismo C++ ((X *) y) -> foo() vs ((X) * y) .foo()
- 21. \ x Fuga in Java?
- 22. se x = 3 e z non è assegnato, perché z = x-- - --x restituisce 2?
- 23. OpenCV GTK + 2.x errore
- 24. JavaFX 2.x TableView localization
- 25. Scrittura in stile pointfree f x = g x x
- 26. Struct X in Struct X?
- 27. Effetto x = + x in JavaScript
- 28. Scriveresti mai seq x x?
- 29. C'è una differenza tra x ++ e ++ x in java?
- 30. Piano (X) modulo X è uguale a X?
Come fatto esattamente si prova questo? Scrivere dei micro-benchmark è molto più difficile di quanto si pensi: [Come posso scrivere un micro-benchmark corretto in Java?] (Http://stackoverflow.com/questions/504103/how-do-i-write-a-correct- micro-benchmark-in-java) – Jesper
perché non provi 'x * x * x * x' vs' Math.pow (x, 4) ', potresti ottenere la risposta –
L'ho provato eseguendo la stessa operazione in un ciclo e tempo di misurazione dalla funzione System.currenttimemillis() –