summaryrefslogtreecommitdiff
path: root/set_str.c
diff options
context:
space:
mode:
authorpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-10-19 12:45:45 +0000
committerpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-10-19 12:45:45 +0000
commitd041a90dff668f50aa54cecf935d0650766f648a (patch)
tree7ca1639101011f1602d64470cd3b622f279ad789 /set_str.c
parent68e3390e48983e3e05c2fdff1094c6db2e0efc4b (diff)
downloadmpfr-d041a90dff668f50aa54cecf935d0650766f648a.tar.gz
Update mpfr_set_str to be much more like strtofr.
Update the documentation to reflect the changes. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@3043 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'set_str.c')
-rw-r--r--set_str.c37
1 files changed, 3 insertions, 34 deletions
diff --git a/set_str.c b/set_str.c
index c80df7485..60e073124 100644
--- a/set_str.c
+++ b/set_str.c
@@ -393,42 +393,11 @@ mpfr_set_str (mpfr_t x, const char *str, int base, mp_rnd_t rnd)
int
mpfr_set_str (mpfr_t x, const char *str, int base, mp_rnd_t rnd)
{
- char *p = (char*) str;
- int negative;
- mpfr_t y;
+ char *p;
- /* Check base */
- if (MPFR_UNLIKELY (base < 2 || base > 36 || *str == 0))
+ if (MPFR_UNLIKELY (*str == 0))
return -1;
-
- /* Check special value with dummy chars after */
- if (strncasecmp (p, "@NaN@", 5) == 0)
- {
- MPFR_SET_NAN (x);
- /* MPFR_RET_NAN not used as the return value isn't a ternary value */
- __gmpfr_flags |= MPFR_FLAGS_NAN;
- return 0;
- }
- negative = (*p == '-');
- if ((str[0] == '-') || (str[0] == '+'))
- p ++;
- if (strncasecmp (p, "@Inf@", 5) == 0)
- {
- MPFR_SET_INF (x);
- (negative) ? MPFR_SET_NEG (x) : MPFR_SET_POS (x);
- return 0;
- }
-
- /* Call Strtofr */
- mpfr_init2 (y, MPFR_PREC (x));
- mpfr_strtofr (y, str, &p, base, rnd);
- if (MPFR_LIKELY (*p == 0))
- {
- negative = mpfr_set (x, y, GMP_RNDN);
- MPFR_ASSERTD (negative == 0);
- }
- mpfr_clear (y);
-
+ mpfr_strtofr (x, str, &p, base, rnd);
return (*p == 0) ? 0 : -1;
}