19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'ext/mprnd.c', line 19
VALUE r_mprnd_initialize(int argc, VALUE *argv, VALUE self)
{
VALUE mode, name, ieee754;
mode = argv[0];
(void)argc;
const char *prefix;
char name_val[10];
if (MPFR_VERSION_MAJOR < 3)
prefix = "GMP";
else
prefix = "MPFR";
switch (FIX2INT(mode)) {
case 0:
sprintf(name_val, "%s_RNDN", prefix);
ieee754 = rb_str_new2("roundTiesToEven");
break;
case 1:
sprintf(name_val, "%s_RNDZ", prefix);
ieee754 = rb_str_new2("roundTowardZero");
break;
case 2:
sprintf(name_val, "%s_RNDU", prefix);
ieee754 = rb_str_new2("roundTowardPositive");
break;
case 3:
sprintf(name_val, "%s_RNDD", prefix);
ieee754 = rb_str_new2("roundTowardNegative");
break;
case 4:
sprintf(name_val, "%s_RNDA", prefix);
ieee754 = rb_str_new2("roundAwayFromZero");
break;
default:
sprintf(name_val, "%s_RNDN", prefix);
ieee754 = rb_str_new2("roundTiesToEven");
}
name = rb_str_new2(name_val);
rb_iv_set(self, "@mode", mode);
rb_iv_set(self, "@name", name);
rb_iv_set(self, "@ieee754", ieee754);
return Qnil;
}
|