Module: CRMF
- Defined in:
- lib/crmf/version.rb,
ext/crmf/crmf.c
Constant Summary collapse
- VERSION =
Returns CRMF gem version.
'0.1.3'.freeze
- LOG2_DOWN =
Returns ↓log(2)↓.
DBL2NUM(d)
- LOG2_UP =
Returns ↑log(2)↑.
DBL2NUM(d)
- PI_DOWN =
Returns ↓𝛑↓.
DBL2NUM(d)
- PI_UP =
Returns ↑𝛑↑.
DBL2NUM(d)
- EULER_DOWN =
Returns ↓euler↓.
DBL2NUM(d)
- EULER_UP =
Returns ↑euler↑.
DBL2NUM(d)
Class Method Summary collapse
- .acos_rd(x) ⇒ Float
- .acos_rn(x) ⇒ Float
- .acos_ru(x) ⇒ Float
- .acos_rz(x) ⇒ Float
- .acosh_rd(x) ⇒ Float
- .acosh_rn(x) ⇒ Float
- .acosh_ru(x) ⇒ Float
- .acosh_rz(x) ⇒ Float
- .add_rd(x, y) ⇒ Float
- .add_rn(x, y) ⇒ Float
- .add_ru(x, y) ⇒ Float
- .add_rz(x, y) ⇒ Float
- .asin_rd(x) ⇒ Float
- .asin_rn(x) ⇒ Float
- .asin_ru(x) ⇒ Float
- .asin_rz(x) ⇒ Float
- .asinh_rd(x) ⇒ Float
- .asinh_rn(x) ⇒ Float
- .asinh_ru(x) ⇒ Float
- .asinh_rz(x) ⇒ Float
- .atan2_rd(x, y) ⇒ Float
- .atan2_rn(x, y) ⇒ Float
- .atan2_ru(x, y) ⇒ Float
- .atan2_rz(x, y) ⇒ Float
- .atan_rd(x) ⇒ Float
- .atan_rn(x) ⇒ Float
- .atan_ru(x) ⇒ Float
- .atan_rz(x) ⇒ Float
- .atanh_rd(x) ⇒ Float
- .atanh_rn(x) ⇒ Float
- .atanh_ru(x) ⇒ Float
- .atanh_rz(x) ⇒ Float
-
.cbrt_rd(x) ⇒ Float
Cubic root, rounded down.
-
.cbrt_rn(x) ⇒ Float
Cubic root, rounded toward nearest.
-
.cbrt_ru(x) ⇒ Float
Cubic root, rounded up.
-
.cbrt_rz(x) ⇒ Float
Cubic root, rounded toward zero.
- .cos_rd(x) ⇒ Float
- .cos_rn(x) ⇒ Float
- .cos_ru(x) ⇒ Float
- .cos_rz(x) ⇒ Float
- .cosh_rd(x) ⇒ Float
- .cosh_rn(x) ⇒ Float
- .cosh_ru(x) ⇒ Float
- .cosh_rz(x) ⇒ Float
- .div_rd(x, y) ⇒ Float
- .div_rn(x, y) ⇒ Float
- .div_ru(x, y) ⇒ Float
- .div_rz(x, y) ⇒ Float
- .exp10_rd(x) ⇒ Float
- .exp10_rn(x) ⇒ Float
- .exp10_ru(x) ⇒ Float
- .exp10_rz(x) ⇒ Float
- .exp2_rd(x) ⇒ Float
- .exp2_rn(x) ⇒ Float
- .exp2_ru(x) ⇒ Float
- .exp2_rz(x) ⇒ Float
- .exp_rd(x) ⇒ Float
- .exp_rn(x) ⇒ Float
- .exp_ru(x) ⇒ Float
- .exp_rz(x) ⇒ Float
-
.expm1_rd(x) ⇒ Float
Returns exp(x) - 1, rounded down.
-
.expm1_rn(x) ⇒ Float
Returns exp(x) - 1, rounded to nearest.
-
.expm1_ru(x) ⇒ Float
Returns exp(x) - 1, rounded up.
-
.expm1_rz(x) ⇒ Float
Returns exp(x) - 1, rounded toward zero.
- .hypot_rd(x, y) ⇒ Float
- .hypot_rn(x, y) ⇒ Float
- .hypot_ru(x, y) ⇒ Float
- .hypot_rz(x, y) ⇒ Float
- .log10_rd(x) ⇒ Float
- .log10_rn(x) ⇒ Float
- .log10_ru(x) ⇒ Float
- .log10_rz(x) ⇒ Float
-
.log1p_rd(x) ⇒ Float
Returns log(x + 1), rounded down.
-
.log1p_rn(x) ⇒ Float
Returns log(x + 1), rounded to nearest.
-
.log1p_ru(x) ⇒ Float
Returns log(x + 1), rounded up.
-
.log1p_rz(x) ⇒ Float
Returns log(x + 1), rounded toward zero.
- .log2_rd(x) ⇒ Float
- .log2_rn(x) ⇒ Float
- .log2_ru(x) ⇒ Float
- .log2_rz(x) ⇒ Float
- .log_rd(x) ⇒ Float
- .log_rn(x) ⇒ Float
- .log_ru(x) ⇒ Float
- .log_rz(x) ⇒ Float
- .mul_rd(x, y) ⇒ Float
- .mul_rn(x, y) ⇒ Float
- .mul_ru(x, y) ⇒ Float
- .mul_rz(x, y) ⇒ Float
- .pow_rd(x, y) ⇒ Float
- .pow_rn(x, y) ⇒ Float
- .pow_ru(x, y) ⇒ Float
- .pow_rz(x, y) ⇒ Float
- .pown_rd(x, n) ⇒ Float
- .pown_rn(x, n) ⇒ Float
- .pown_ru(x, n) ⇒ Float
- .pown_rz(x, n) ⇒ Float
- .rootn_rd(x, n) ⇒ Float
- .rootn_rn(x, n) ⇒ Float
- .rootn_ru(x, n) ⇒ Float
- .rootn_rz(x, n) ⇒ Float
- .sin_rd(x) ⇒ Float
- .sin_rn(x) ⇒ Float
- .sin_ru(x) ⇒ Float
- .sin_rz(x) ⇒ Float
- .sinh_rd(x) ⇒ Float
- .sinh_rn(x) ⇒ Float
- .sinh_ru(x) ⇒ Float
- .sinh_rz(x) ⇒ Float
- .sqrt_rd(x) ⇒ Float
- .sqrt_rn(x) ⇒ Float
- .sqrt_ru(x) ⇒ Float
- .sqrt_rz(x) ⇒ Float
- .sub_rd(x, y) ⇒ Float
- .sub_rn(x, y) ⇒ Float
- .sub_ru(x, y) ⇒ Float
- .sub_rz(x, y) ⇒ Float
- .tan_rd(x) ⇒ Float
- .tan_rn(x) ⇒ Float
- .tan_ru(x) ⇒ Float
- .tan_rz(x) ⇒ Float
- .tanh_rd(x) ⇒ Float
- .tanh_rn(x) ⇒ Float
- .tanh_ru(x) ⇒ Float
- .tanh_rz(x) ⇒ Float
-
.to_float(obj, rnd = :nearest) ⇒ Float
Convert obj to a Float, rounding according to rnd.
Class Method Details
.acos_rd(x) ⇒ Float
1372 1373 1374 |
# File 'ext/crmf/crmf.c', line 1372
static VALUE crmf_acos_rd(VALUE self, VALUE x) {
return DBL2NUM(acos_rd(NUM2DBL(x)));
}
|
.acos_rn(x) ⇒ Float
1368 1369 1370 |
# File 'ext/crmf/crmf.c', line 1368
static VALUE crmf_acos_rn(VALUE self, VALUE x) {
return DBL2NUM(acos_rn(NUM2DBL(x)));
}
|
.acos_ru(x) ⇒ Float
1376 1377 1378 |
# File 'ext/crmf/crmf.c', line 1376
static VALUE crmf_acos_ru(VALUE self, VALUE x) {
return DBL2NUM(acos_ru(NUM2DBL(x)));
}
|
.acos_rz(x) ⇒ Float
1380 1381 1382 |
# File 'ext/crmf/crmf.c', line 1380
static VALUE crmf_acos_rz(VALUE self, VALUE x) {
return DBL2NUM(acos_rz(NUM2DBL(x)));
}
|
.acosh_rd(x) ⇒ Float
1478 |
# File 'ext/crmf/crmf.c', line 1478
static VALUE crmf_acosh_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(acosh, MPFR_RNDD)}
|
.acosh_rn(x) ⇒ Float
1480 |
# File 'ext/crmf/crmf.c', line 1480
static VALUE crmf_acosh_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(acosh, MPFR_RNDN)}
|
.acosh_ru(x) ⇒ Float
1479 |
# File 'ext/crmf/crmf.c', line 1479
static VALUE crmf_acosh_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(acosh, MPFR_RNDU)}
|
.acosh_rz(x) ⇒ Float
1477 |
# File 'ext/crmf/crmf.c', line 1477
static VALUE crmf_acosh_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(acosh, MPFR_RNDZ)}
|
.add_rd(x, y) ⇒ Float
1589 1590 1591 1592 1593 1594 1595 1596 1597 |
# File 'ext/crmf/crmf.c', line 1589
static VALUE crmf_add_rd(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_DOWNWARD);
volatile double dr = dx + dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.add_rn(x, y) ⇒ Float
1609 1610 1611 1612 1613 1614 1615 1616 |
# File 'ext/crmf/crmf.c', line 1609
static VALUE crmf_add_rn(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TONEAREST);
volatile double dr = dx + dy;
return DBL2NUM(dr);
}
|
.add_ru(x, y) ⇒ Float
1599 1600 1601 1602 1603 1604 1605 1606 1607 |
# File 'ext/crmf/crmf.c', line 1599
static VALUE crmf_add_ru(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_UPWARD);
volatile double dr = dx + dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.add_rz(x, y) ⇒ Float
1579 1580 1581 1582 1583 1584 1585 1586 1587 |
# File 'ext/crmf/crmf.c', line 1579
static VALUE crmf_add_rz(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TOWARDZERO);
volatile double dr = dx + dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.asin_rd(x) ⇒ Float
1389 1390 1391 |
# File 'ext/crmf/crmf.c', line 1389
static VALUE crmf_asin_rd(VALUE self, VALUE x) {
return DBL2NUM(asin_rd(NUM2DBL(x)));
}
|
.asin_rn(x) ⇒ Float
1385 1386 1387 |
# File 'ext/crmf/crmf.c', line 1385
static VALUE crmf_asin_rn(VALUE self, VALUE x) {
return DBL2NUM(asin_rn(NUM2DBL(x)));
}
|
.asin_ru(x) ⇒ Float
1393 1394 1395 |
# File 'ext/crmf/crmf.c', line 1393
static VALUE crmf_asin_ru(VALUE self, VALUE x) {
return DBL2NUM(asin_ru(NUM2DBL(x)));
}
|
.asin_rz(x) ⇒ Float
1397 1398 1399 |
# File 'ext/crmf/crmf.c', line 1397
static VALUE crmf_asin_rz(VALUE self, VALUE x) {
return DBL2NUM(asin_rz(NUM2DBL(x)));
}
|
.asinh_rd(x) ⇒ Float
1483 |
# File 'ext/crmf/crmf.c', line 1483
static VALUE crmf_asinh_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(asinh, MPFR_RNDD)}
|
.asinh_rn(x) ⇒ Float
1485 |
# File 'ext/crmf/crmf.c', line 1485
static VALUE crmf_asinh_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(asinh, MPFR_RNDN)}
|
.asinh_ru(x) ⇒ Float
1484 |
# File 'ext/crmf/crmf.c', line 1484
static VALUE crmf_asinh_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(asinh, MPFR_RNDU)}
|
.asinh_rz(x) ⇒ Float
1482 |
# File 'ext/crmf/crmf.c', line 1482
static VALUE crmf_asinh_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(asinh, MPFR_RNDZ)}
|
.atan2_rd(x, y) ⇒ Float
1524 |
# File 'ext/crmf/crmf.c', line 1524
static VALUE crmf_atan2_rd(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDD)}
|
.atan2_rn(x, y) ⇒ Float
1526 |
# File 'ext/crmf/crmf.c', line 1526
static VALUE crmf_atan2_rn(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDN)}
|
.atan2_ru(x, y) ⇒ Float
1525 |
# File 'ext/crmf/crmf.c', line 1525
static VALUE crmf_atan2_ru(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDU)}
|
.atan2_rz(x, y) ⇒ Float
1523 |
# File 'ext/crmf/crmf.c', line 1523
static VALUE crmf_atan2_rz(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDZ)}
|
.atan_rd(x) ⇒ Float
1406 1407 1408 |
# File 'ext/crmf/crmf.c', line 1406
static VALUE crmf_atan_rd(VALUE self, VALUE x) {
return DBL2NUM(atan_rd(NUM2DBL(x)));
}
|
.atan_rn(x) ⇒ Float
1402 1403 1404 |
# File 'ext/crmf/crmf.c', line 1402
static VALUE crmf_atan_rn(VALUE self, VALUE x) {
return DBL2NUM(atan_rn(NUM2DBL(x)));
}
|
.atan_ru(x) ⇒ Float
1410 1411 1412 |
# File 'ext/crmf/crmf.c', line 1410
static VALUE crmf_atan_ru(VALUE self, VALUE x) {
return DBL2NUM(atan_ru(NUM2DBL(x)));
}
|
.atan_rz(x) ⇒ Float
1414 1415 1416 |
# File 'ext/crmf/crmf.c', line 1414
static VALUE crmf_atan_rz(VALUE self, VALUE x) {
return DBL2NUM(atan_rz(NUM2DBL(x)));
}
|
.atanh_rd(x) ⇒ Float
1488 |
# File 'ext/crmf/crmf.c', line 1488
static VALUE crmf_atanh_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(atanh, MPFR_RNDD)}
|
.atanh_rn(x) ⇒ Float
1490 |
# File 'ext/crmf/crmf.c', line 1490
static VALUE crmf_atanh_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(atanh, MPFR_RNDN)}
|
.atanh_ru(x) ⇒ Float
1489 |
# File 'ext/crmf/crmf.c', line 1489
static VALUE crmf_atanh_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(atanh, MPFR_RNDU)}
|
.atanh_rz(x) ⇒ Float
1487 |
# File 'ext/crmf/crmf.c', line 1487
static VALUE crmf_atanh_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(atanh, MPFR_RNDZ)}
|
.cbrt_rd(x) ⇒ Float
Cubic root, rounded down
1500 |
# File 'ext/crmf/crmf.c', line 1500
static VALUE crmf_cbrt_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(cbrt, MPFR_RNDD)}
|
.cbrt_rn(x) ⇒ Float
Cubic root, rounded toward nearest
1504 |
# File 'ext/crmf/crmf.c', line 1504
static VALUE crmf_cbrt_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(cbrt, MPFR_RNDN)}
|
.cbrt_ru(x) ⇒ Float
Cubic root, rounded up
1502 |
# File 'ext/crmf/crmf.c', line 1502
static VALUE crmf_cbrt_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(cbrt, MPFR_RNDU)}
|
.cbrt_rz(x) ⇒ Float
Cubic root, rounded toward zero.
1498 |
# File 'ext/crmf/crmf.c', line 1498
static VALUE crmf_cbrt_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(cbrt, MPFR_RNDZ)}
|
.cos_rd(x) ⇒ Float
1321 1322 1323 |
# File 'ext/crmf/crmf.c', line 1321
static VALUE crmf_cos_rd(VALUE self, VALUE x) {
return DBL2NUM(cos_rd(NUM2DBL(x)));
}
|
.cos_rn(x) ⇒ Float
1317 1318 1319 |
# File 'ext/crmf/crmf.c', line 1317
static VALUE crmf_cos_rn(VALUE self, VALUE x) {
return DBL2NUM(cos_rn(NUM2DBL(x)));
}
|
.cos_ru(x) ⇒ Float
1325 1326 1327 |
# File 'ext/crmf/crmf.c', line 1325
static VALUE crmf_cos_ru(VALUE self, VALUE x) {
return DBL2NUM(cos_ru(NUM2DBL(x)));
}
|
.cos_rz(x) ⇒ Float
1329 1330 1331 |
# File 'ext/crmf/crmf.c', line 1329
static VALUE crmf_cos_rz(VALUE self, VALUE x) {
return DBL2NUM(cos_rz(NUM2DBL(x)));
}
|
.cosh_rd(x) ⇒ Float
1423 1424 1425 |
# File 'ext/crmf/crmf.c', line 1423
static VALUE crmf_cosh_rd(VALUE self, VALUE x) {
return DBL2NUM(cosh_rd(NUM2DBL(x)));
}
|
.cosh_rn(x) ⇒ Float
1419 1420 1421 |
# File 'ext/crmf/crmf.c', line 1419
static VALUE crmf_cosh_rn(VALUE self, VALUE x) {
return DBL2NUM(cosh_rn(NUM2DBL(x)));
}
|
.cosh_ru(x) ⇒ Float
1427 1428 1429 |
# File 'ext/crmf/crmf.c', line 1427
static VALUE crmf_cosh_ru(VALUE self, VALUE x) {
return DBL2NUM(cosh_ru(NUM2DBL(x)));
}
|
.cosh_rz(x) ⇒ Float
1431 1432 1433 |
# File 'ext/crmf/crmf.c', line 1431
static VALUE crmf_cosh_rz(VALUE self, VALUE x) {
return DBL2NUM(cosh_rz(NUM2DBL(x)));
}
|
.div_rd(x, y) ⇒ Float
1709 1710 1711 1712 1713 1714 1715 1716 1717 |
# File 'ext/crmf/crmf.c', line 1709
static VALUE crmf_div_rd(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_DOWNWARD);
volatile double dr = dx / dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.div_rn(x, y) ⇒ Float
1729 1730 1731 1732 1733 1734 1735 1736 |
# File 'ext/crmf/crmf.c', line 1729
static VALUE crmf_div_rn(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TONEAREST);
volatile double dr = dx / dy;
return DBL2NUM(dr);
}
|
.div_ru(x, y) ⇒ Float
1719 1720 1721 1722 1723 1724 1725 1726 1727 |
# File 'ext/crmf/crmf.c', line 1719
static VALUE crmf_div_ru(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_UPWARD);
volatile double dr = dx / dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.div_rz(x, y) ⇒ Float
1699 1700 1701 1702 1703 1704 1705 1706 1707 |
# File 'ext/crmf/crmf.c', line 1699
static VALUE crmf_div_rz(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TOWARDZERO);
volatile double dr = dx / dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.exp10_rd(x) ⇒ Float
1468 |
# File 'ext/crmf/crmf.c', line 1468
static VALUE crmf_exp10_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp10, MPFR_RNDD)}
|
.exp10_rn(x) ⇒ Float
1470 |
# File 'ext/crmf/crmf.c', line 1470
static VALUE crmf_exp10_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp10, MPFR_RNDN)}
|
.exp10_ru(x) ⇒ Float
1469 |
# File 'ext/crmf/crmf.c', line 1469
static VALUE crmf_exp10_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp10, MPFR_RNDU)}
|
.exp10_rz(x) ⇒ Float
1467 |
# File 'ext/crmf/crmf.c', line 1467
static VALUE crmf_exp10_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp10, MPFR_RNDZ)}
|
.exp2_rd(x) ⇒ Float
1463 |
# File 'ext/crmf/crmf.c', line 1463
static VALUE crmf_exp2_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp2, MPFR_RNDD)}
|
.exp2_rn(x) ⇒ Float
1465 |
# File 'ext/crmf/crmf.c', line 1465
static VALUE crmf_exp2_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp2, MPFR_RNDN)}
|
.exp2_ru(x) ⇒ Float
1464 |
# File 'ext/crmf/crmf.c', line 1464
static VALUE crmf_exp2_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp2, MPFR_RNDU)}
|
.exp2_rz(x) ⇒ Float
1462 |
# File 'ext/crmf/crmf.c', line 1462
static VALUE crmf_exp2_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(exp2, MPFR_RNDZ)}
|
.exp_rd(x) ⇒ Float
1211 1212 1213 |
# File 'ext/crmf/crmf.c', line 1211
static VALUE crmf_exp_rd(VALUE self, VALUE x) {
return DBL2NUM(exp_rd(NUM2DBL(x)));
}
|
.exp_rn(x) ⇒ Float
1207 1208 1209 |
# File 'ext/crmf/crmf.c', line 1207
static VALUE crmf_exp_rn(VALUE self, VALUE x) {
return DBL2NUM(exp_rn(NUM2DBL(x)));
}
|
.exp_ru(x) ⇒ Float
1215 1216 1217 |
# File 'ext/crmf/crmf.c', line 1215
static VALUE crmf_exp_ru(VALUE self, VALUE x) {
return DBL2NUM(exp_ru(NUM2DBL(x)));
}
|
.exp_rz(x) ⇒ Float
1219 1220 1221 |
# File 'ext/crmf/crmf.c', line 1219
static VALUE crmf_exp_rz(VALUE self, VALUE x) {
return DBL2NUM(exp_rz(NUM2DBL(x)));
}
|
.expm1_rd(x) ⇒ Float
Returns exp(x) - 1, rounded down
1281 1282 1283 |
# File 'ext/crmf/crmf.c', line 1281
static VALUE crmf_expm1_rd(VALUE self, VALUE x) {
return DBL2NUM(expm1_rd(NUM2DBL(x)));
}
|
.expm1_rn(x) ⇒ Float
Returns exp(x) - 1, rounded to nearest
1276 1277 1278 |
# File 'ext/crmf/crmf.c', line 1276
static VALUE crmf_expm1_rn(VALUE self, VALUE x) {
return DBL2NUM(expm1_rn(NUM2DBL(x)));
}
|
.expm1_ru(x) ⇒ Float
Returns exp(x) - 1, rounded up
1286 1287 1288 |
# File 'ext/crmf/crmf.c', line 1286
static VALUE crmf_expm1_ru(VALUE self, VALUE x) {
return DBL2NUM(expm1_ru(NUM2DBL(x)));
}
|
.expm1_rz(x) ⇒ Float
Returns exp(x) - 1, rounded toward zero
1291 1292 1293 |
# File 'ext/crmf/crmf.c', line 1291
static VALUE crmf_expm1_rz(VALUE self, VALUE x) {
return DBL2NUM(expm1_rz(NUM2DBL(x)));
}
|
.hypot_rd(x, y) ⇒ Float
1529 |
# File 'ext/crmf/crmf.c', line 1529
static VALUE crmf_hypot_rd(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDD)}
|
.hypot_rn(x, y) ⇒ Float
1531 |
# File 'ext/crmf/crmf.c', line 1531
static VALUE crmf_hypot_rn(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDN)}
|
.hypot_ru(x, y) ⇒ Float
1530 |
# File 'ext/crmf/crmf.c', line 1530
static VALUE crmf_hypot_ru(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDU)}
|
.hypot_rz(x, y) ⇒ Float
1528 |
# File 'ext/crmf/crmf.c', line 1528
static VALUE crmf_hypot_rz(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(y, x, atan2, MPFR_RNDZ)}
|
.log10_rd(x) ⇒ Float
1262 1263 1264 |
# File 'ext/crmf/crmf.c', line 1262
static VALUE crmf_log10_rd(VALUE self, VALUE x) {
return DBL2NUM(log10_rd(NUM2DBL(x)));
}
|
.log10_rn(x) ⇒ Float
1258 1259 1260 |
# File 'ext/crmf/crmf.c', line 1258
static VALUE crmf_log10_rn(VALUE self, VALUE x) {
return DBL2NUM(log10_rn(NUM2DBL(x)));
}
|
.log10_ru(x) ⇒ Float
1266 1267 1268 |
# File 'ext/crmf/crmf.c', line 1266
static VALUE crmf_log10_ru(VALUE self, VALUE x) {
return DBL2NUM(log10_ru(NUM2DBL(x)));
}
|
.log10_rz(x) ⇒ Float
1270 1271 1272 |
# File 'ext/crmf/crmf.c', line 1270
static VALUE crmf_log10_rz(VALUE self, VALUE x) {
return DBL2NUM(log10_rz(NUM2DBL(x)));
}
|
.log1p_rd(x) ⇒ Float
Returns log(x + 1), rounded down
1302 1303 1304 |
# File 'ext/crmf/crmf.c', line 1302
static VALUE crmf_log1p_rd(VALUE self, VALUE x) {
return DBL2NUM(log1p_rd(NUM2DBL(x)));
}
|
.log1p_rn(x) ⇒ Float
Returns log(x + 1), rounded to nearest
1297 1298 1299 |
# File 'ext/crmf/crmf.c', line 1297
static VALUE crmf_log1p_rn(VALUE self, VALUE x) {
return DBL2NUM(log1p_rn(NUM2DBL(x)));
}
|
.log1p_ru(x) ⇒ Float
Returns log(x + 1), rounded up
1307 1308 1309 |
# File 'ext/crmf/crmf.c', line 1307
static VALUE crmf_log1p_ru(VALUE self, VALUE x) {
return DBL2NUM(log1p_ru(NUM2DBL(x)));
}
|
.log1p_rz(x) ⇒ Float
Returns log(x + 1), rounded toward zero
1312 1313 1314 |
# File 'ext/crmf/crmf.c', line 1312
static VALUE crmf_log1p_rz(VALUE self, VALUE x) {
return DBL2NUM(log1p_rz(NUM2DBL(x)));
}
|
.log2_rd(x) ⇒ Float
1245 1246 1247 |
# File 'ext/crmf/crmf.c', line 1245
static VALUE crmf_log2_rd(VALUE self, VALUE x) {
return DBL2NUM(log2_rd(NUM2DBL(x)));
}
|
.log2_rn(x) ⇒ Float
1241 1242 1243 |
# File 'ext/crmf/crmf.c', line 1241
static VALUE crmf_log2_rn(VALUE self, VALUE x) {
return DBL2NUM(log2_rn(NUM2DBL(x)));
}
|
.log2_ru(x) ⇒ Float
1249 1250 1251 |
# File 'ext/crmf/crmf.c', line 1249
static VALUE crmf_log2_ru(VALUE self, VALUE x) {
return DBL2NUM(log2_ru(NUM2DBL(x)));
}
|
.log2_rz(x) ⇒ Float
1253 1254 1255 |
# File 'ext/crmf/crmf.c', line 1253
static VALUE crmf_log2_rz(VALUE self, VALUE x) {
return DBL2NUM(log2_rz(NUM2DBL(x)));
}
|
.log_rd(x) ⇒ Float
1228 1229 1230 |
# File 'ext/crmf/crmf.c', line 1228
static VALUE crmf_log_rd(VALUE self, VALUE x) {
return DBL2NUM(log_rd(NUM2DBL(x)));
}
|
.log_rn(x) ⇒ Float
1224 1225 1226 |
# File 'ext/crmf/crmf.c', line 1224
static VALUE crmf_log_rn(VALUE self, VALUE x) {
return DBL2NUM(log_rn(NUM2DBL(x)));
}
|
.log_ru(x) ⇒ Float
1232 1233 1234 |
# File 'ext/crmf/crmf.c', line 1232
static VALUE crmf_log_ru(VALUE self, VALUE x) {
return DBL2NUM(log_ru(NUM2DBL(x)));
}
|
.log_rz(x) ⇒ Float
1236 1237 1238 |
# File 'ext/crmf/crmf.c', line 1236
static VALUE crmf_log_rz(VALUE self, VALUE x) {
return DBL2NUM(log_rz(NUM2DBL(x)));
}
|
.mul_rd(x, y) ⇒ Float
1669 1670 1671 1672 1673 1674 1675 1676 1677 |
# File 'ext/crmf/crmf.c', line 1669
static VALUE crmf_mul_rd(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_DOWNWARD);
volatile double dr = dx * dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.mul_rn(x, y) ⇒ Float
1689 1690 1691 1692 1693 1694 1695 1696 |
# File 'ext/crmf/crmf.c', line 1689
static VALUE crmf_mul_rn(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TONEAREST);
volatile double dr = dx * dy;
return DBL2NUM(dr);
}
|
.mul_ru(x, y) ⇒ Float
1679 1680 1681 1682 1683 1684 1685 1686 1687 |
# File 'ext/crmf/crmf.c', line 1679
static VALUE crmf_mul_ru(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_UPWARD);
volatile double dr = dx * dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.mul_rz(x, y) ⇒ Float
1659 1660 1661 1662 1663 1664 1665 1666 1667 |
# File 'ext/crmf/crmf.c', line 1659
static VALUE crmf_mul_rz(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TOWARDZERO);
volatile double dr = dx * dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.pow_rd(x, y) ⇒ Float
1519 |
# File 'ext/crmf/crmf.c', line 1519
static VALUE crmf_pow_rd(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(x, y, pow, MPFR_RNDD)}
|
.pow_rn(x, y) ⇒ Float
1521 |
# File 'ext/crmf/crmf.c', line 1521
static VALUE crmf_pow_rn(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(x, y, pow, MPFR_RNDN)}
|
.pow_ru(x, y) ⇒ Float
1520 |
# File 'ext/crmf/crmf.c', line 1520
static VALUE crmf_pow_ru(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(x, y, pow, MPFR_RNDU)}
|
.pow_rz(x, y) ⇒ Float
1518 |
# File 'ext/crmf/crmf.c', line 1518
static VALUE crmf_pow_rz(VALUE self, VALUE x, VALUE y) {CRMF_MPFR_DYADIC(x, y, pow, MPFR_RNDZ)}
|
.pown_rd(x, n) ⇒ Float
1550 |
# File 'ext/crmf/crmf.c', line 1550
static VALUE crmf_pown_rd(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2LONG(n), pow_si, MPFR_RNDD)}
|
.pown_rn(x, n) ⇒ Float
1558 |
# File 'ext/crmf/crmf.c', line 1558
static VALUE crmf_pown_rn(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2LONG(n), pow_si, MPFR_RNDN)}
|
.pown_ru(x, n) ⇒ Float
1554 |
# File 'ext/crmf/crmf.c', line 1554
static VALUE crmf_pown_ru(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2LONG(n), pow_si, MPFR_RNDU)}
|
.pown_rz(x, n) ⇒ Float
1546 |
# File 'ext/crmf/crmf.c', line 1546
static VALUE crmf_pown_rz(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2LONG(n), pow_si, MPFR_RNDZ)}
|
.rootn_rd(x, n) ⇒ Float
1568 |
# File 'ext/crmf/crmf.c', line 1568
static VALUE crmf_rootn_rd(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2ULONG(n), pow_si, MPFR_RNDD)}
|
.rootn_rn(x, n) ⇒ Float
1576 |
# File 'ext/crmf/crmf.c', line 1576
static VALUE crmf_rootn_rn(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2ULONG(n), pow_si, MPFR_RNDN)}
|
.rootn_ru(x, n) ⇒ Float
1572 |
# File 'ext/crmf/crmf.c', line 1572
static VALUE crmf_rootn_ru(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2ULONG(n), pow_si, MPFR_RNDU)}
|
.rootn_rz(x, n) ⇒ Float
1564 |
# File 'ext/crmf/crmf.c', line 1564
static VALUE crmf_rootn_rz(VALUE self, VALUE x, VALUE n) {CRMF_MPFR_DYADIC_INTEGER(x, NUM2ULONG(n), pow_si, MPFR_RNDZ)}
|
.sin_rd(x) ⇒ Float
1338 1339 1340 |
# File 'ext/crmf/crmf.c', line 1338
static VALUE crmf_sin_rd(VALUE self, VALUE x) {
return DBL2NUM(sin_rd(NUM2DBL(x)));
}
|
.sin_rn(x) ⇒ Float
1334 1335 1336 |
# File 'ext/crmf/crmf.c', line 1334
static VALUE crmf_sin_rn(VALUE self, VALUE x) {
return DBL2NUM(sin_rn(NUM2DBL(x)));
}
|
.sin_ru(x) ⇒ Float
1342 1343 1344 |
# File 'ext/crmf/crmf.c', line 1342
static VALUE crmf_sin_ru(VALUE self, VALUE x) {
return DBL2NUM(sin_ru(NUM2DBL(x)));
}
|
.sin_rz(x) ⇒ Float
1346 1347 1348 |
# File 'ext/crmf/crmf.c', line 1346
static VALUE crmf_sin_rz(VALUE self, VALUE x) {
return DBL2NUM(sin_rz(NUM2DBL(x)));
}
|
.sinh_rd(x) ⇒ Float
1440 1441 1442 |
# File 'ext/crmf/crmf.c', line 1440
static VALUE crmf_sinh_rd(VALUE self, VALUE x) {
return DBL2NUM(sinh_rd(NUM2DBL(x)));
}
|
.sinh_rn(x) ⇒ Float
1436 1437 1438 |
# File 'ext/crmf/crmf.c', line 1436
static VALUE crmf_sinh_rn(VALUE self, VALUE x) {
return DBL2NUM(sinh_rn(NUM2DBL(x)));
}
|
.sinh_ru(x) ⇒ Float
1444 1445 1446 |
# File 'ext/crmf/crmf.c', line 1444
static VALUE crmf_sinh_ru(VALUE self, VALUE x) {
return DBL2NUM(sinh_ru(NUM2DBL(x)));
}
|
.sinh_rz(x) ⇒ Float
1448 1449 1450 |
# File 'ext/crmf/crmf.c', line 1448
static VALUE crmf_sinh_rz(VALUE self, VALUE x) {
return DBL2NUM(sinh_rz(NUM2DBL(x)));
}
|
.sqrt_rd(x) ⇒ Float
1493 |
# File 'ext/crmf/crmf.c', line 1493
static VALUE crmf_sqrt_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(sqrt, MPFR_RNDD)}
|
.sqrt_rn(x) ⇒ Float
1495 |
# File 'ext/crmf/crmf.c', line 1495
static VALUE crmf_sqrt_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(sqrt, MPFR_RNDN)}
|
.sqrt_ru(x) ⇒ Float
1494 |
# File 'ext/crmf/crmf.c', line 1494
static VALUE crmf_sqrt_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(sqrt, MPFR_RNDU)}
|
.sqrt_rz(x) ⇒ Float
1492 |
# File 'ext/crmf/crmf.c', line 1492
static VALUE crmf_sqrt_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(sqrt, MPFR_RNDZ)}
|
.sub_rd(x, y) ⇒ Float
1629 1630 1631 1632 1633 1634 1635 1636 1637 |
# File 'ext/crmf/crmf.c', line 1629
static VALUE crmf_sub_rd(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_DOWNWARD);
volatile double dr = dx - dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.sub_rn(x, y) ⇒ Float
1649 1650 1651 1652 1653 1654 1655 1656 |
# File 'ext/crmf/crmf.c', line 1649
static VALUE crmf_sub_rn(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TONEAREST);
volatile double dr = dx - dy;
return DBL2NUM(dr);
}
|
.sub_ru(x, y) ⇒ Float
1639 1640 1641 1642 1643 1644 1645 1646 1647 |
# File 'ext/crmf/crmf.c', line 1639
static VALUE crmf_sub_ru(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_UPWARD);
volatile double dr = dx - dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.sub_rz(x, y) ⇒ Float
1619 1620 1621 1622 1623 1624 1625 1626 1627 |
# File 'ext/crmf/crmf.c', line 1619
static VALUE crmf_sub_rz(VALUE self, VALUE x, VALUE y)
{
double dx = NUM2DBL(x);
double dy = NUM2DBL(y);
fesetround(FE_TOWARDZERO);
volatile double dr = dx - dy;
fesetround(FE_TONEAREST);
return DBL2NUM(dr);
}
|
.tan_rd(x) ⇒ Float
1355 1356 1357 |
# File 'ext/crmf/crmf.c', line 1355
static VALUE crmf_tan_rd(VALUE self, VALUE x) {
return DBL2NUM(tan_rd(NUM2DBL(x)));
}
|
.tan_rn(x) ⇒ Float
1351 1352 1353 |
# File 'ext/crmf/crmf.c', line 1351
static VALUE crmf_tan_rn(VALUE self, VALUE x) {
return DBL2NUM(tan_rn(NUM2DBL(x)));
}
|
.tan_ru(x) ⇒ Float
1359 1360 1361 |
# File 'ext/crmf/crmf.c', line 1359
static VALUE crmf_tan_ru(VALUE self, VALUE x) {
return DBL2NUM(tan_ru(NUM2DBL(x)));
}
|
.tan_rz(x) ⇒ Float
1363 1364 1365 |
# File 'ext/crmf/crmf.c', line 1363
static VALUE crmf_tan_rz(VALUE self, VALUE x) {
return DBL2NUM(tan_rz(NUM2DBL(x)));
}
|
.tanh_rd(x) ⇒ Float
1473 |
# File 'ext/crmf/crmf.c', line 1473
static VALUE crmf_tanh_rd(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(tanh, MPFR_RNDD)}
|
.tanh_rn(x) ⇒ Float
1475 |
# File 'ext/crmf/crmf.c', line 1475
static VALUE crmf_tanh_rn(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(tanh, MPFR_RNDN)}
|
.tanh_ru(x) ⇒ Float
1474 |
# File 'ext/crmf/crmf.c', line 1474
static VALUE crmf_tanh_ru(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(tanh, MPFR_RNDU)}
|
.tanh_rz(x) ⇒ Float
1472 |
# File 'ext/crmf/crmf.c', line 1472
static VALUE crmf_tanh_rz(VALUE self, VALUE x) {CRMF_MPFR_MONADIC(tanh, MPFR_RNDZ)}
|
.to_float(obj, rnd = :nearest) ⇒ Float
Convert obj to a Float, rounding according to rnd.
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 |
# File 'ext/crmf/crmf.c', line 214
static VALUE crmf_object_to_float(int argc, VALUE *argv, VALUE self)
{
VALUE obj = Qnil, rnd = Qnil;
mpfr_rnd_t rndt = MPFR_RNDN;
rb_scan_args(argc, argv, "11", &obj, &rnd);
if (rnd != Qnil)
rndt = crmf_sym_to_rnd(rnd);
MPFR_DECL_INIT(mpfra, 53);
int type = rb_type(obj);
int t = 0;
if (type == RUBY_T_FLOAT) {
printf("RUBY_T_FLOAT\n");
double d = NUM2DBL(obj);
t = mpfr_set_d(mpfra, d, rndt);
}
else if (type == RUBY_T_FIXNUM) {
printf("RUBY_T_FIXNUM\n");
long int li = NUM2LL(obj);
t = mpfr_set_si(mpfra, li, rndt);
}
else if (type == RUBY_T_BIGNUM) {
printf("RUBY_T_BIGNUM\n");
obj = rb_funcallv(obj, id_to_s, 0, NULL);
const char *strptr = StringValuePtr(obj);
t = mpfr_set_str(mpfra, strptr, 10, rndt);
}
else if (type == RUBY_T_STRING) {
printf("RUBY_T_STRING\n");
const char *strptr = StringValuePtr(obj);
t = mpfr_set_str(mpfra, strptr, 10, rndt);
}
else {
obj = rb_funcallv(obj, id_to_f, 0, NULL);
double d = NUM2DBL(obj);
t = mpfr_set_d(mpfra, d, rndt);
}
mpfr_subnormalize(mpfra, t, rndt);
double d = mpfr_get_d(mpfra, rndt);
return DBL2NUM(d);
}
|