summaryrefslogtreecommitdiff
path: root/BUGS
blob: 4d2ccb9833d51a8284f7d89c192f5d2bd5eb815b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Copyright 1999, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
Contributed by the Spaces project, INRIA Lorraine.

This file is part of the MPFR Library.

The MPFR Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at your
option) any later version.

The MPFR Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
License for more details.

You should have received a copy of the GNU Lesser General Public License
along with the MPFR Library; see the file COPYING.LIB.  If not, write to
the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
MA 02110-1301, USA.

##############################################################################

Probably many bugs.

Known bugs:

* The overflow/underflow exceptions may be badly handled in some functions;
  specially when the intermediary internal results have exponent which
  exceeds the hardware limit (2^30 for a 32 bits CPU, and 2^62 for a 64 bits
  CPU).

* In mpfr_pow_z (thus mpfr_pow too, when mpfr_pow_z is called), the
  underflow flag is not always set. Example: x = 0.11 in base 2,
  y = 1.0e38, GMP_RNDN.

* Some large input values for mpfr_eint are currently not supported.
  However they should be detected, so that one can have the following
  documented behavior: NaN is returned and the erange flag is
  set to indicate that the input is in an unsupported domain. If MPFR
  has been built with --enable-warnings and the environment variable
  MPFR_QUIET is null, a warning is output to the standard error stream.
  Reference concerning the warnings:
    http://sympa.loria.fr/wwsympa/arc/mpfr/2006-11/msg00010.html
  and follow-ups.

Potential bugs:

* Possible integer overflows on some machines.

* Possible bugs with huge precisions (> 2^30).

* Possible bugs if the chosen exponent range does not allow to represent
  the range [1/16, 16].

* Possible infinite loop in some functions for particular cases: when
  the exact result is an exactly representable number or the middle of
  consecutive two such numbers. However for non-algebraic functions, it is
  believed that no such case exists, except the well-known cases like cos(0)=1,
  exp(0)=1, and so on, and the x^y function when y is an integer or y=1/2^k.

* The mpfr_set_ld function may be quite slow if the long double type has an
  exponent of more than 15 bits.

* mpfr_set_d may give wrong results on some non-IEEE architectures.

* Error analysis for some functions may be incorrect (out-of-date due
  to modifications in the code?).


Problems due to compiler bugs:

* on some architectures (for example alpha-dec-osf), gcc 3.3 wrongly
  compares "long double" floating-point numbers, with optimization level
  1 or higher. This bug can be detected by the following program:

  #include <stdio.h>
  #include <stdlib.h>
  #include <float.h>
  int
  main ()
  {
    long double d;
    d = 1.0; while (d < LDBL_MAX / 2.0) d += d;
    if (d == (long double) 0.0)
      printf ("d equals 0.0\n");
  }

  This results in a problem in the mpfr_set_ld function. A workaround is
  to compile set_ld.c with -O0 (no optimization).