![]() ![]() | ![]() |
version 1.1.1.2, 2000/09/09 14:13:08 | version 1.1.1.3, 2003/08/25 16:06:34 | ||
---|---|---|---|
|
|
||
/* mpf_set_si() -- Assign a float from a signed int. | /* mpf_set_si() -- Assign a float from a signed int. | ||
Copyright (C) 1993, 1994, 1995, 2000 Free Software Foundation, Inc. | Copyright 1993, 1994, 1995, 2000, 2001, 2002 Free Software Foundation, Inc. | ||
This file is part of the GNU MP Library. | This file is part of the GNU MP Library. | ||
|
|
||
#include "gmp-impl.h" | #include "gmp-impl.h" | ||
void | void | ||
#if __STDC__ | mpf_set_si (mpf_ptr dest, long val) | ||
mpf_set_si (mpf_ptr x, long int val) | |||
#else | |||
mpf_set_si (x, val) | |||
mpf_ptr x; | |||
long int val; | |||
#endif | |||
{ | { | ||
if (val > 0) | mp_size_t size; | ||
mp_limb_t vl; | |||
vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val); | |||
dest->_mp_d[0] = vl & GMP_NUMB_MASK; | |||
size = vl != 0; | |||
#if GMP_NAIL_BITS != 0 | |||
if (vl > GMP_NUMB_MAX) | |||
{ | { | ||
x->_mp_d[0] = val; | dest->_mp_d[1] = vl >> GMP_NUMB_BITS; | ||
x->_mp_size = 1; | size = 2; | ||
x->_mp_exp = 1; | |||
} | } | ||
else if (val < 0) | #endif | ||
{ | |||
x->_mp_d[0] = (unsigned long) -val; | dest->_mp_exp = size; | ||
x->_mp_size = -1; | dest->_mp_size = val >= 0 ? size : -size; | ||
x->_mp_exp = 1; | |||
} | |||
else | |||
{ | |||
x->_mp_size = 0; | |||
x->_mp_exp = 0; | |||
} | |||
} | } |