Next: Portability functions, Previous: Inline functions, Up: Using the library [Index]

In general, the algorithms in the library are written for double
precision only. The `long double`

type is not supported for
actual computation.

One reason for this choice is that the precision of `long double`

is platform dependent. The IEEE standard only specifies the minimum
precision of extended precision numbers, while the precision of
`double`

is the same on all platforms.

However, it is sometimes necessary to interact with external data in long-double format, so the vector and matrix datatypes include long-double versions.

It should be noted that in some system libraries the `stdio.h`

formatted input/output functions `printf`

and `scanf`

are
not implemented correctly for `long double`

. Undefined or
incorrect results are avoided by testing these functions during the
`configure`

stage of library compilation and eliminating certain
GSL functions which depend on them if necessary. The corresponding
line in the `configure`

output looks like this,

checking whether printf works with long double... no

Consequently when `long double`

formatted input/output does not
work on a given system it should be impossible to link a program which
uses GSL functions dependent on this.

If it is necessary to work on a system which does not support formatted
`long double`

input/output then the options are to use binary
formats or to convert `long double`

results into `double`

for
reading and writing.