diff options
author | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-10-19 12:45:45 +0000 |
---|---|---|
committer | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-10-19 12:45:45 +0000 |
commit | d041a90dff668f50aa54cecf935d0650766f648a (patch) | |
tree | 7ca1639101011f1602d64470cd3b622f279ad789 /set_str.c | |
parent | 68e3390e48983e3e05c2fdff1094c6db2e0efc4b (diff) | |
download | mpfr-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.c | 37 |
1 files changed, 3 insertions, 34 deletions
@@ -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; } |