1
/* Test file for mpfr_out_str.
3
Copyright 1999, 2001, 2002 Free Software Foundation, Inc.
5
This file is part of the MPFR Library.
7
The MPFR Library is free software; you can redistribute it and/or modify
8
it under the terms of the GNU Lesser General Public License as published by
9
the Free Software Foundation; either version 2.1 of the License, or (at your
10
option) any later version.
12
The MPFR Library is distributed in the hope that it will be useful, but
13
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15
License for more details.
17
You should have received a copy of the GNU Lesser General Public License
18
along with the MPFR Library; see the file COPYING.LIB. If not, write to
19
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20
MA 02111-1307, USA. */
30
#include "mpfr-test.h"
34
#define check(d,r,b) check4(d,r,b,53)
36
void check4 _PROTO((double, mp_rnd_t, int, int));
37
void check_large _PROTO((void));
40
check4(double d, mp_rnd_t rnd, int base, int prec)
45
mpfr_set_d(x, d, rnd);
46
fprintf(fout, "%1.19e base %d rnd %d:\n ", d, base, rnd);
47
mpfr_out_str(fout, base, (base==2) ? prec : 0, x, rnd);
55
mpfr_t x; mp_exp_t e; char *s;
60
mpfr_set_str_raw (x, "0.1010101E10");
61
s = mpfr_get_str (NULL, &e, 10, 2, x, GMP_RNDU);
64
/* checks rounding of negative numbers */
66
mpfr_set_d (x, -11.5, GMP_RNDN);
67
s = mpfr_get_str (NULL, &e, 10, 2, x, GMP_RNDD);
68
if (strcmp (s, "-12"))
70
fprintf (stderr, "Error in mpfr_get_str for x=-11.5 and rnd=GMP_RNDD\n");
77
s = mpfr_get_str (NULL, &e, 10, 2, x, GMP_RNDU);
78
if (strcmp (s, "-11"))
80
fprintf (stderr, "Error in mpfr_get_str for x=-11.5 and rnd=GMP_RNDU\n");
87
/* bug found by Jean-Pierre Merlet, produced error in mpfr_get_str */
88
mpfr_set_prec (x, 128);
89
mpfr_set_str_raw (x, "0.10111001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011010E3");
90
s = mpfr_get_str (NULL, &e, 10, 0, x, GMP_RNDU);
93
mpfr_set_prec (x, 381);
94
mpfr_set_str_raw (x, "0.111111111111111111111111111111111111111111111111111111111111111111101110110000100110011101101101001010111000101111000100100011110101010110101110100000010100001000110100000100011111001000010010000010001010111001011110000001110010111101100001111000101101100000010110000101100100000101010110010110001010100111001111100011100101100000100100111001100010010011110011011010110000001000010");
95
s = mpfr_get_str (NULL, &e, 10, 0, x, GMP_RNDD);
98
fprintf (stderr, "Error in mpfr_get_str for x=0.999999..., exponent is %d instead of 0\n", (int) e);
107
main (int argc, char *argv[])
109
int i,N=10000,r,p; double d;
112
/* with no argument: prints to /dev/null,
113
tout_str N: prints N tests to stdout */
114
if (argc==1) fout=fopen("/dev/null", "w");
115
else { fout=stdout; N=atoi(argv[1]); }
116
check(-1.37247529013405550000e+15, GMP_RNDN, 7);
117
check(-1.5674376729569697500e+15, GMP_RNDN, 19);
118
check(-5.71262771772792640000e-79, GMP_RNDU, 16);
119
check(-0.0, GMP_RNDU, 7);
120
check(-4.5306392613572974756e-308, GMP_RNDN, 8);
121
check(-6.7265890111403371523e-165, GMP_RNDN, 4);
122
check(-1.3242553591261807653e+156, GMP_RNDN, 16);
123
check(-6.606499965302424244461355e233, GMP_RNDN, 10);
124
check4(1.0, GMP_RNDN, 10, 120);
125
check(1.0, GMP_RNDU, 10);
126
check(4.059650008e-83, GMP_RNDN, 10);
127
check(-7.4, GMP_RNDN, 10);
128
check(0.997, GMP_RNDN, 10);
129
check(-4.53063926135729747564e-308, GMP_RNDN, 10);
130
check(2.14478198760196000000e+16, GMP_RNDN, 10);
131
check(7.02293374921793516813e-84, GMP_RNDN, 10);
134
SEED_RAND (time(NULL));
144
while (ABS(d) < DBL_MIN);
147
p = 2 + LONG_RAND() % 35;