|  | Home | Libraries | People | FAQ | More | 
      By running our performance test suite multiple times, we can compare the effect
      of different compilers: as might be expected, the differences are generally
      small compared to say disabling internal use of long
      double. However, there are still gains
      to be main, particularly from some of the commercial offerings:
    
Table 16.5. Compiler Comparison on Windows x64
| Function | 
                Microsoft Visual C++ version 14.0 | 
                GNU C++ version 5.3.0 | 
                GNU C++ version 5.3.0 | 
                Intel C++ C++0x mode version 1600 | 
|---|---|---|---|---|
| assoc_laguerre | 
                1.16 | 
                1.21 | 
                1.06 | 
                1.00 | 
| assoc_legendre | 
                1.57 | 
                1.80 | 
                1.16 | 
                1.00 | 
| beta | 
                1.74 | 
                3.78 | 
                2.17 | 
                1.00 | 
| beta (incomplete) | 
                1.44 | 
                3.03 | 
                1.84 | 
                1.00 | 
| cbrt | 
                3.21 | 
                3.43 | 
                3.07 | 
                1.00 | 
| cyl_bessel_i | 
                1.11 | 
                2.78 | 
                1.21 | 
                1.00 | 
| cyl_bessel_i (integer order) | 
                1.29 | 
                3.16 | 
                1.22 | 
                1.00 | 
| cyl_bessel_j | 
                1.19 | 
                2.06 | 
                1.25 | 
                1.00 | 
| cyl_bessel_j (integer order) | 
                1.36 | 
                2.39 | 
                1.47 | 
                1.00 | 
| cyl_bessel_k | 
                1.04 | 
                9.43 | 
                1.03 | 
                1.00 | 
| cyl_bessel_k (integer order) | 
                1.26 | 
                10.49 | 
                1.10 | 
                1.00 | 
| cyl_neumann | 
                16.76 | 
                2.01 | 
                1.00 | 
                15.35 | 
| cyl_neumann (integer order) | 
                1.00 | 
                1.79 | 
                1.24 | 
                1.02 | 
| digamma | 
                1.20 | 
                3.75 | 
                2.15 | 
                1.00 | 
| ellint_1 | 
                1.87 | 
                1.99 | 
                1.32 | 
                1.00 | 
| ellint_1 (complete) | 
                2.18 | 
                2.57 | 
                1.57 | 
                1.00 | 
| ellint_2 | 
                1.78 | 
                2.17 | 
                1.52 | 
                1.00 | 
| ellint_2 (complete) | 
                2.14 | 
                2.07 | 
                1.24 | 
                1.00 | 
| ellint_3 | 
                1.94 | 
                2.91 | 
                1.65 | 
                1.00 | 
| ellint_3 (complete) | 
                2.05 | 
                3.07 | 
                1.46 | 
                1.00 | 
| ellint_rc | 
                1.58 | 
                2.68 | 
                1.55 | 
                1.00 | 
| ellint_rd | 
                1.75 | 
                1.83 | 
                1.40 | 
                1.00 | 
| ellint_rf | 
                1.69 | 
                2.40 | 
                1.57 | 
                1.00 | 
| ellint_rj | 
                1.91 | 
                2.96 | 
                1.43 | 
                1.00 | 
| erf | 
                1.77 | 
                2.92 | 
                1.92 | 
                1.00 | 
| erfc | 
                1.29 | 
                3.41 | 
                2.06 | 
                1.00 | 
| expint | 
                1.39 | 
                3.07 | 
                2.14 | 
                1.00 | 
| expint (En) | 
                1.10 | 
                2.19 | 
                1.38 | 
                1.00 | 
| expm1 | 
                1.00 | 
                3.10 | 
                2.40 | 
                1.10 | 
| gamma_p | 
                1.29 | 
                2.64 | 
                1.71 | 
                1.00 | 
| gamma_p_inv | 
                1.36 | 
                2.47 | 
                1.91 | 
                1.00 | 
| gamma_q | 
                1.16 | 
                2.79 | 
                1.61 | 
                1.00 | 
| gamma_q_inv | 
                1.37 | 
                2.38 | 
                1.89 | 
                1.00 | 
| ibeta | 
                1.34 | 
                3.13 | 
                1.83 | 
                1.00 | 
| ibeta_inv | 
                1.51 | 
                2.81 | 
                2.27 | 
                1.00 | 
| ibetac | 
                1.29 | 
                2.94 | 
                1.73 | 
                1.00 | 
| ibetac_inv | 
                1.41 | 
                2.80 | 
                1.78 | 
                1.00 | 
| jacobi_cn | 
                1.36 | 
                3.72 | 
                2.28 | 
                1.00 | 
| jacobi_dn | 
                1.82 | 
                3.68 | 
                2.27 | 
                1.00 | 
| jacobi_sn | 
                1.31 | 
                3.73 | 
                2.43 | 
                1.00 | 
| laguerre | 
                1.00 | 
                1.15 | 
                1.04 | 
                1.10 | 
| legendre | 
                1.07 | 
                1.16 | 
                1.00 | 
                1.13 | 
| legendre Q | 
                1.00 | 
                1.20 | 
                1.01 | 
                1.07 | 
| lgamma | 
                1.00 | 
                3.07 | 
                1.82 | 
                1.05 | 
| log1p | 
                1.00 | 
                2.00 | 
                1.14 | 
                1.00 | 
| polygamma | 
                1.16 | 
                1.02 | 
                2.24 | 
                1.00 | 
| sph_bessel | 
                1.17 | 
                1.55 | 
                1.09 | 
                1.00 | 
| sph_neumann | 
                1.08 | 
                2.07 | 
                1.00 | 
                1.01 | 
| tgamma | 
                1.31 | 
                4.03 | 
                2.49 | 
                1.00 | 
| tgamma (incomplete) | 
                1.26 | 
                2.52 | 
                1.73 | 
                1.00 | 
| trigamma | 
                1.35 | 
                2.88 | 
                1.41 | 
                1.00 | 
| zeta | 
                1.34 | 
                3.83 | 
                2.52 | 
                1.00 | 
Table 16.6. Compiler Comparison on linux
| Function | 
                GNU C++ version 5.3.0 | 
                GNU C++ version 5.3.0 | 
|---|---|---|
| assoc_laguerre | 
                1.36 | 
                1.00 | 
| assoc_legendre | 
                2.55 | 
                1.00 | 
| beta | 
                4.71 | 
                1.00 | 
| beta (incomplete) | 
                3.12 | 
                1.00 | 
| cbrt | 
                2.53 | 
                1.00 | 
| cyl_bessel_i | 
                3.47 | 
                1.00 | 
| cyl_bessel_i (integer order) | 
                3.38 | 
                1.00 | 
| cyl_bessel_j | 
                2.69 | 
                1.00 | 
| cyl_bessel_j (integer order) | 
                2.59 | 
                1.00 | 
| cyl_bessel_k | 
                6.86 | 
                1.00 | 
| cyl_bessel_k (integer order) | 
                10.17 | 
                1.00 | 
| cyl_neumann | 
                2.48 | 
                1.00 | 
| cyl_neumann (integer order) | 
                2.20 | 
                1.00 | 
| digamma | 
                1.92 | 
                1.00 | 
| ellint_1 | 
                1.94 | 
                1.00 | 
| ellint_1 (complete) | 
                1.86 | 
                1.00 | 
| ellint_2 | 
                2.32 | 
                1.00 | 
| ellint_2 (complete) | 
                1.71 | 
                1.00 | 
| ellint_3 | 
                2.75 | 
                1.00 | 
| ellint_3 (complete) | 
                2.23 | 
                1.00 | 
| ellint_rc | 
                1.57 | 
                1.00 | 
| ellint_rd | 
                2.23 | 
                1.00 | 
| ellint_rf | 
                1.51 | 
                1.00 | 
| ellint_rj | 
                2.33 | 
                1.00 | 
| erf | 
                2.60 | 
                1.00 | 
| erfc | 
                2.68 | 
                1.00 | 
| expint | 
                2.47 | 
                1.00 | 
| expint (En) | 
                1.86 | 
                1.00 | 
| expm1 | 
                1.00 | 
                1.10 | 
| gamma_p | 
                2.42 | 
                1.00 | 
| gamma_p_inv | 
                2.24 | 
                1.00 | 
| gamma_q | 
                2.53 | 
                1.00 | 
| gamma_q_inv | 
                2.45 | 
                1.00 | 
| ibeta | 
                2.71 | 
                1.00 | 
| ibeta_inv | 
                2.58 | 
                1.00 | 
| ibetac | 
                2.66 | 
                1.00 | 
| ibetac_inv | 
                2.44 | 
                1.00 | 
| jacobi_cn | 
                2.77 | 
                1.00 | 
| jacobi_dn | 
                2.80 | 
                1.00 | 
| jacobi_sn | 
                2.86 | 
                1.00 | 
| laguerre | 
                1.09 | 
                1.00 | 
| legendre | 
                1.16 | 
                1.00 | 
| legendre Q | 
                1.18 | 
                1.00 | 
| lgamma | 
                2.20 | 
                1.00 | 
| log1p | 
                1.00 | 
                1.00 | 
| polygamma | 
                3.93 | 
                1.00 | 
| sph_bessel | 
                1.71 | 
                1.00 | 
| sph_neumann | 
                2.15 | 
                1.00 | 
| tgamma | 
                3.69 | 
                1.00 | 
| tgamma (incomplete) | 
                2.35 | 
                1.00 | 
| trigamma | 
                1.64 | 
                1.00 | 
| zeta | 
                2.71 | 
                1.00 |