Class: GMP::F

Inherits:
Numeric
  • Object
show all
Defined in:
ext/gmpf.c,
ext/gmp.c,
ext/gmpf.c

Overview

GMP Multiple Precision floating point numbers.

Instances of this class can store variables of the type mpf_t. This class also contains many methods that act as the functions for mpf_t variables, as well as a few methods that attempt to make this library more Ruby-ish.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'ext/gmpf.c', line 73

VALUE r_gmpf_initialize(int argc, VALUE *argv, VALUE self)
{
  MP_FLOAT *self_val, *arg_val_f;
  unsigned long prec = 0;
  VALUE arg;
  int base = 10;

  mpf_get_struct (self, self_val);

  if (argc==0) {
#ifdef MPFR
    mpfr_init (self_val);
    mpfr_set_si (self_val, 0, __gmp_default_rounding_mode);
#else
    r_mpf_init (self_val);
    mpf_set_si (self_val, 0);
#endif
    return Qnil;
  }

  arg = argv[0];

  //argc >= 2 ==> argv[0] is value, argv[1] is prec
  if (argc >= 2) {
    if (FIXNUM_P(argv[1])) {
      if (FIX2INT(argv[1]) >= 0)
        prec = FIX2INT(argv[1]);
      else {
        r_mpf_init (self_val);
        rb_raise(rb_eRangeError, "prec must be non-negative");
      }
    } else {
      r_mpf_init (self_val);
      rb_raise(rb_eTypeError, "prec must be a Fixnum");
    }
  } else if (GMPF_P(arg)) {
    mpf_get_struct (arg, arg_val_f);
    prec = mpf_get_prec (arg_val_f);
  }
#ifdef MPFR
  if (prec == 0)
    mpfr_init (self_val);
  else
    mpfr_init2 (self_val, prec);

  if (STRING_P(argv[0])) {
    if (argc >= 3) {
      if (FIXNUM_P(argv[2])) {
        if (FIX2INT(argv[2]) >= 2 && FIX2INT(argv[2]) <= 36)
          base = FIX2INT(argv[2]);
        else
          rb_raise(rb_eRangeError, "base must be between 2 and 36");
      }
      else {
        rb_raise(rb_eTypeError, "base must be a Fixnum");
      }
    }
    if (argc == 4) {
      // TODO: FIGURE IT OUT. ACCEPT A ROUNDING MODE!
    }

    mpf_set_value2 (self_val, arg, base);
    return Qnil;
  }

#else
  (void)base;

  if (prec == 0)
    r_mpf_init (self_val);
  else
    r_mpf_init2 (self_val, prec);
#endif

  if (GMPF_P(arg)) {
    mpf_get_struct (arg, arg_val_f);
    mpf_set(self_val, arg_val_f);
  } else {
    mpf_set_value(self_val, arg);
  }

  return Qnil;
}

Class Method Details

.const_catalanObject

.const_eulerObject

.const_log2Object

.const_piObject

.default_precObject



41
42
43
44
45
# File 'ext/gmp.c', line 41

static VALUE r_gmpfsg_get_default_prec(VALUE klass)
{
  (void)klass;
  return INT2NUM(mpf_get_default_prec());
}

.default_prec=(arg) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'ext/gmp.c', line 47

static VALUE r_gmpfsg_set_default_prec(VALUE klass, VALUE arg)
{
  (void)klass;
  if (FIXNUM_P(arg)) {
    if (FIX2NUM(arg) <= 0) {
      rb_raise(rb_eRangeError, "prec must be positive");
    }
    mpf_set_default_prec (FIX2NUM(arg));
  } else {
    rb_raise(rb_eTypeError, "prec must be FixNum");
  }
  return Qnil;
}

.default_rounding_modeObject

Rounding Related Functions

.default_rounding_mode=Object

.mpfr_buildopt_decimal_pObject

.mpfr_buildopt_tls_pObject

.GMP::F.new(arg) ⇒ Object

Creates a new GMP::F float, with arg as its value, converting where necessary.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'ext/gmpf.c', line 58

VALUE r_gmpfsg_new(int argc, VALUE *argv, VALUE klass)
{
  MP_FLOAT *res_val;
  VALUE res;
  (void)klass;

  if (argc > 4)
    rb_raise(rb_eArgError, "wrong # of arguments(%d for 0, 1 2, 3, or 4)", argc);

  mpf_make_struct (res, res_val);
  rb_obj_call_init(res, argc, argv);

  return res;
}

.sprintf2Object

Formatted Output Functions

Instance Method Details

#*Object

#**Object Also known as: pow

#+Object

#-Object

Float Arithmetic

#-@Object

#/Object Also known as: divide

#<Object

#<=Object

#<=>Object

Float Comparison

#==Object

#>Object

#>=Object

#absObject

#abs!Object

#acosObject

#acoshObject

#agmObject

“fms”, r_gmpfr_fms

#asinObject

#asinhObject

#atanObject

#atan2Object

#atanhObject

#can_round?Boolean

Returns:

  • (Boolean)

#cbrtObject

#ceilObject

Miscellaneous Functions

#ceil!Object

#coerce(arg) ⇒ Object

new method - testing



36
37
38
39
# File 'ext/gmp.c', line 36

static VALUE r_gmpf_coerce(VALUE self, VALUE arg)
{
  return rb_assoc_new(r_gmpfsg_new(1, &arg, cGMP_F), self);
}

#cosObject

#coshObject

#cotObject

#cothObject

#cscObject

#cschObject

#digammaObject

#eintObject

#erfObject

#erfcObject

#expObject

#exp10Object

#exp2Object

#expm1Object

#finite?Boolean

Returns:

  • (Boolean)

#floorObject

#floor!Object

#gammaObject

#hypotObject

#infinite?Boolean

Returns:

  • (Boolean)

#integer?Boolean

“integer?”, r_gmpfr_integer_p

Returns:

  • (Boolean)

#j0Object

#j1Object

#jnObject

#li2Object

#lngammaObject

#logObject

Special Functions

#log10Object

#log1pObject

“fac”, r_gmpfr_fac

#log2Object

#nan?Boolean

Comparison Functions

Returns:

  • (Boolean)

#neg!Object

#number?Boolean

Returns:

  • (Boolean)

#precObject

#prec=Object

#prec_raw=Object

#rec_sqrtObject

#regular?Boolean

Returns:

  • (Boolean)

#secObject

#sechObject

#sgnObject

#sinObject

#sin_cosObject

#sinhObject

#sinh_coshObject

#sqrtObject

Basic Arithmetic Functions

#tanObject

#tanhObject

#to_dObject Also known as: to_f

#to_sObject Also known as: inspect

Converting Floats

#truncObject

#trunc!Object

#y0Object

#y1Object

#ynObject

#zero?Boolean

Returns:

  • (Boolean)

#zetaObject