GNU Scientific Library – Reference Manual: Alternative optimized functions

Next: Support for different numeric types, Previous: Portability functions, Up: Using the library [Index]

### 2.8 Alternative optimized functions

The main implementation of some functions in the library will not be optimal on all architectures. For example, there are several ways to compute a Gaussian random variate and their relative speeds are platform-dependent. In cases like this the library provides alternative implementations of these functions with the same interface. If you write your application using calls to the standard implementation you can select an alternative version later via a preprocessor definition. It is also possible to introduce your own optimized functions this way while retaining portability. The following lines demonstrate the use of a platform-dependent choice of methods for sampling from the Gaussian distribution,

    #ifdef SPARC
    #define gsl_ran_gaussian gsl_ran_gaussian_ratio_method
    #endif
    #ifdef INTEL
    #define gsl_ran_gaussian my_gaussian
    #endif

These lines would be placed in the configuration header file `config.h` of the application, which should then be included by all the source files. Note that the alternative implementations will not produce bit-for-bit identical results, and in the case of random number distributions will produce an entirely different stream of random variates.