Commit | Line | Data |
---|---|---|
6dca1d21 JB |
1 | Submitted By: Jim Gifford (jim at cross-lfs dot org) |
2 | Date: 2009-02-28 | |
3 | Initial Package Version: 2.4.1 | |
4 | Origin: MPFR Website | |
5 | Upstream Status: Fixed | |
6 | Description: See http://www.mpfr.org Website Under Bugs | |
7 | ||
8 | diff -Naur mpfr-2.4.1.orig/mpfr.h mpfr-2.4.1/mpfr.h | |
9 | --- mpfr-2.4.1.orig/mpfr.h 2009-02-25 08:16:08.000000000 -0800 | |
10 | +++ mpfr-2.4.1/mpfr.h 2009-02-28 15:22:16.554489175 -0800 | |
11 | @@ -27,7 +27,7 @@ | |
12 | #define MPFR_VERSION_MAJOR 2 | |
13 | #define MPFR_VERSION_MINOR 4 | |
14 | #define MPFR_VERSION_PATCHLEVEL 1 | |
15 | -#define MPFR_VERSION_STRING "2.4.1" | |
16 | +#define MPFR_VERSION_STRING "2.4.1-p1" | |
17 | ||
18 | /* Macros dealing with MPFR VERSION */ | |
19 | #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) | |
20 | diff -Naur mpfr-2.4.1.orig/PATCHES mpfr-2.4.1/PATCHES | |
21 | --- mpfr-2.4.1.orig/PATCHES 2009-02-20 01:43:17.000000000 -0800 | |
22 | +++ mpfr-2.4.1/PATCHES 2009-02-28 15:22:16.554489175 -0800 | |
23 | @@ -0,0 +1 @@ | |
24 | +remainder-neg | |
25 | diff -Naur mpfr-2.4.1.orig/rem1.c mpfr-2.4.1/rem1.c | |
26 | --- mpfr-2.4.1.orig/rem1.c 2009-02-20 01:43:17.000000000 -0800 | |
27 | +++ mpfr-2.4.1/rem1.c 2009-02-28 15:22:16.554489175 -0800 | |
28 | @@ -170,7 +170,12 @@ | |
29 | } | |
30 | ||
31 | if (mpz_cmp_ui (r, 0) == 0) | |
32 | - inex = mpfr_set_ui (rem, 0, GMP_RNDN); | |
33 | + { | |
34 | + inex = mpfr_set_ui (rem, 0, GMP_RNDN); | |
35 | + /* take into account sign of x */ | |
36 | + if (signx < 0) | |
37 | + mpfr_neg (rem, rem, GMP_RNDN); | |
38 | + } | |
39 | else | |
40 | { | |
41 | if (rnd_q == GMP_RNDN) | |
42 | @@ -190,6 +195,9 @@ | |
43 | *quo += 1; | |
44 | } | |
45 | } | |
46 | + /* take into account sign of x */ | |
47 | + if (signx < 0) | |
48 | + mpz_neg (r, r); | |
49 | inex = mpfr_set_z (rem, r, rnd); | |
50 | /* if ex > ey, rem should be multiplied by 2^ey, else by 2^ex */ | |
51 | MPFR_EXP (rem) += (ex > ey) ? ey : ex; | |
52 | @@ -198,13 +206,6 @@ | |
53 | if (quo) | |
54 | *quo *= sign; | |
55 | ||
56 | - /* take into account sign of x */ | |
57 | - if (signx < 0) | |
58 | - { | |
59 | - mpfr_neg (rem, rem, GMP_RNDN); | |
60 | - inex = -inex; | |
61 | - } | |
62 | - | |
63 | mpz_clear (mx); | |
64 | mpz_clear (my); | |
65 | mpz_clear (r); | |
66 | diff -Naur mpfr-2.4.1.orig/tests/tremquo.c mpfr-2.4.1/tests/tremquo.c | |
67 | --- mpfr-2.4.1.orig/tests/tremquo.c 2009-02-20 01:43:15.000000000 -0800 | |
68 | +++ mpfr-2.4.1/tests/tremquo.c 2009-02-28 15:22:16.554489175 -0800 | |
69 | @@ -25,6 +25,36 @@ | |
70 | ||
71 | #include "mpfr-test.h" | |
72 | ||
73 | +static void | |
74 | +bug20090227 (void) | |
75 | +{ | |
76 | + mpfr_t x, y, r1, r2; | |
77 | + int inex1, inex2; | |
78 | + | |
79 | + mpfr_init2 (x, 118); | |
80 | + mpfr_init2 (y, 181); | |
81 | + mpfr_init2 (r1, 140); | |
82 | + mpfr_init2 (r2, 140); | |
83 | + mpfr_set_si (x, -1, GMP_RNDN); | |
84 | + mpfr_set_str_binary (y, "1.100100100001111110110101010001000100001011010001100001000110100110001001100011001100010100010111000000011011100000111001101000100101001000000100100111000001000100010100110011111010"); | |
85 | + inex1 = mpfr_remainder (r1, x, y, GMP_RNDU); | |
86 | + /* since the quotient is -1, r1 is the rounding of x+y */ | |
87 | + inex2 = mpfr_add (r2, x, y, GMP_RNDU); | |
88 | + if (mpfr_cmp (r1, r2)) | |
89 | + { | |
90 | + printf ("Error in mpfr_remainder (bug20090227)\n"); | |
91 | + printf ("Expected "); | |
92 | + mpfr_dump (r2); | |
93 | + printf ("Got "); | |
94 | + mpfr_dump (r1); | |
95 | + exit (1); | |
96 | + } | |
97 | + mpfr_clear (x); | |
98 | + mpfr_clear (y); | |
99 | + mpfr_clear (r1); | |
100 | + mpfr_clear (r2); | |
101 | +} | |
102 | + | |
103 | int | |
104 | main (int argc, char *argv[]) | |
105 | { | |
106 | @@ -50,6 +80,8 @@ | |
107 | ||
108 | tests_start_mpfr (); | |
109 | ||
110 | + bug20090227 (); | |
111 | + | |
112 | mpfr_init (x); | |
113 | mpfr_init (y); | |
114 | mpfr_init (r); | |
115 | diff -Naur mpfr-2.4.1.orig/VERSION mpfr-2.4.1/VERSION | |
116 | --- mpfr-2.4.1.orig/VERSION 2009-02-25 08:16:08.000000000 -0800 | |
117 | +++ mpfr-2.4.1/VERSION 2009-02-28 15:22:16.554489175 -0800 | |
118 | @@ -1 +1 @@ | |
119 | -2.4.1 | |
120 | +2.4.1-p1 | |
121 | diff -Naur mpfr-2.4.1.orig/version.c mpfr-2.4.1/version.c | |
122 | --- mpfr-2.4.1.orig/version.c 2009-02-25 08:16:08.000000000 -0800 | |
123 | +++ mpfr-2.4.1/version.c 2009-02-28 15:22:16.554489175 -0800 | |
124 | @@ -25,5 +25,5 @@ | |
125 | const char * | |
126 | mpfr_get_version (void) | |
127 | { | |
128 | - return "2.4.1"; | |
129 | + return "2.4.1-p1"; | |
130 | } |