bigdecimal 3.1.4 → 3.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/bigdecimal/bigdecimal.c +70 -69
- data/lib/bigdecimal/util.rb +5 -5
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 109c70397447eabf22f0e869db4b2c0c902c7d0baaf28865aebfc534e3c14b9f
|
4
|
+
data.tar.gz: 43df8b8d27be2b5cbf29c7396c07eabbca3119067b525f94155f2901f2c058d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b0b82714e555c1ca30e761296f497d2cf914a50d19d553cca37b51af6b85914bbc86772b5bb8d70388020dbff9abc3e0501b3d6bb95ba3d68c30a91d5b197fa
|
7
|
+
data.tar.gz: a4bc1e9d1918fb84f5405c3dc2fce2358a074f0f729084936ec7ee2010dffeeee889fb0054d932f35175c48577888fc74bba7afde492f628d8beef5deeeadc0d
|
data/ext/bigdecimal/bigdecimal.c
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
#include "bits.h"
|
32
32
|
#include "static_assert.h"
|
33
33
|
|
34
|
-
#define BIGDECIMAL_VERSION "3.1.
|
34
|
+
#define BIGDECIMAL_VERSION "3.1.5"
|
35
35
|
|
36
36
|
/* #define ENABLE_NUMERIC_STRING */
|
37
37
|
|
@@ -657,7 +657,7 @@ BigDecimal_precision(VALUE self)
|
|
657
657
|
* Returns the number of decimal digits following the decimal digits in +self+.
|
658
658
|
*
|
659
659
|
* BigDecimal("0").scale # => 0
|
660
|
-
* BigDecimal("1").scale # =>
|
660
|
+
* BigDecimal("1").scale # => 0
|
661
661
|
* BigDecimal("1.1").scale # => 1
|
662
662
|
* BigDecimal("3.1415").scale # => 4
|
663
663
|
* BigDecimal("-1e20").precision # => 0
|
@@ -2689,7 +2689,7 @@ BigDecimal_ceil(int argc, VALUE *argv, VALUE self)
|
|
2689
2689
|
* A space at the start of s returns positive values with a leading space.
|
2690
2690
|
*
|
2691
2691
|
* If s contains a number, a space is inserted after each group of that many
|
2692
|
-
*
|
2692
|
+
* digits, starting from '.' and counting outwards.
|
2693
2693
|
*
|
2694
2694
|
* If s ends with an 'E', engineering notation (0.xxxxEnn) is used.
|
2695
2695
|
*
|
@@ -2697,14 +2697,14 @@ BigDecimal_ceil(int argc, VALUE *argv, VALUE self)
|
|
2697
2697
|
*
|
2698
2698
|
* Examples:
|
2699
2699
|
*
|
2700
|
-
* BigDecimal('-
|
2701
|
-
* #=> '-123.45678 90123 45678 9'
|
2700
|
+
* BigDecimal('-1234567890123.45678901234567890').to_s('5F')
|
2701
|
+
* #=> '-123 45678 90123.45678 90123 45678 9'
|
2702
2702
|
*
|
2703
|
-
* BigDecimal('
|
2704
|
-
* #=> '+
|
2703
|
+
* BigDecimal('1234567890123.45678901234567890').to_s('+8F')
|
2704
|
+
* #=> '+12345 67890123.45678901 23456789'
|
2705
2705
|
*
|
2706
|
-
* BigDecimal('
|
2707
|
-
* #=> '
|
2706
|
+
* BigDecimal('1234567890123.45678901234567890').to_s(' F')
|
2707
|
+
* #=> ' 1234567890123.4567890123456789'
|
2708
2708
|
*/
|
2709
2709
|
static VALUE
|
2710
2710
|
BigDecimal_to_s(int argc, VALUE *argv, VALUE self)
|
@@ -3722,7 +3722,7 @@ rb_convert_to_BigDecimal(VALUE val, size_t digs, int raise_exception)
|
|
3722
3722
|
* - Other type:
|
3723
3723
|
*
|
3724
3724
|
* - Raises an exception if keyword argument +exception+ is +true+.
|
3725
|
-
* - Returns +nil+ if keyword argument +exception+ is +
|
3725
|
+
* - Returns +nil+ if keyword argument +exception+ is +false+.
|
3726
3726
|
*
|
3727
3727
|
* Raises an exception if +value+ evaluates to a Float
|
3728
3728
|
* and +digits+ is larger than Float::DIG + 1.
|
@@ -4363,7 +4363,20 @@ BigDecimal_negative_zero(void)
|
|
4363
4363
|
* (2/3r).to_d(3) # => 0.667e0
|
4364
4364
|
* "0.5".to_d # => 0.5e0
|
4365
4365
|
*
|
4366
|
-
* ==
|
4366
|
+
* == Methods for Working with \JSON
|
4367
|
+
*
|
4368
|
+
* - {::json_create}[https://docs.ruby-lang.org/en/master/BigDecimal.html#method-c-json_create]:
|
4369
|
+
* Returns a new \BigDecimal object constructed from the given object.
|
4370
|
+
* - {#as_json}[https://docs.ruby-lang.org/en/master/BigDecimal.html#method-i-as_json]:
|
4371
|
+
* Returns a 2-element hash representing +self+.
|
4372
|
+
* - {#to_json}[https://docs.ruby-lang.org/en/master/BigDecimal.html#method-i-to_json]:
|
4373
|
+
* Returns a \JSON string representing +self+.
|
4374
|
+
*
|
4375
|
+
* These methods are provided by the {JSON gem}[https://github.com/flori/json]. To make these methods available:
|
4376
|
+
*
|
4377
|
+
* require 'json/add/bigdecimal'
|
4378
|
+
*
|
4379
|
+
* * == License
|
4367
4380
|
*
|
4368
4381
|
* Copyright (C) 2002 by Shigeo Kobayashi <shigeo@tinyforest.gr.jp>.
|
4369
4382
|
*
|
@@ -6706,95 +6719,90 @@ VpToFString(Real *a, char *buf, size_t buflen, size_t fFmt, int fPlus)
|
|
6706
6719
|
/* fPlus = 0: default, 1: set ' ' before digits, 2: set '+' before digits. */
|
6707
6720
|
{
|
6708
6721
|
size_t i, n;
|
6709
|
-
DECDIG m, e
|
6722
|
+
DECDIG m, e;
|
6710
6723
|
char *p = buf;
|
6711
|
-
size_t plen = buflen;
|
6724
|
+
size_t plen = buflen, delim = fFmt;
|
6712
6725
|
ssize_t ex;
|
6713
6726
|
|
6714
6727
|
if (VpToSpecialString(a, buf, buflen, fPlus)) return;
|
6715
6728
|
|
6716
|
-
#define
|
6717
|
-
if (plen <
|
6718
|
-
|
6719
|
-
|
6729
|
+
#define APPEND(c, group) do { \
|
6730
|
+
if (plen < 1) goto overflow; \
|
6731
|
+
if (group && delim == 0) { \
|
6732
|
+
*p = ' '; \
|
6733
|
+
p += 1; \
|
6734
|
+
plen -= 1; \
|
6735
|
+
} \
|
6736
|
+
if (plen < 1) goto overflow; \
|
6737
|
+
*p = c; \
|
6738
|
+
p += 1; \
|
6739
|
+
plen -= 1; \
|
6740
|
+
if (group) delim = (delim + 1) % fFmt; \
|
6720
6741
|
} while (0)
|
6721
6742
|
|
6722
6743
|
|
6723
6744
|
if (BIGDECIMAL_NEGATIVE_P(a)) {
|
6724
|
-
|
6725
|
-
ADVANCE(1);
|
6745
|
+
APPEND('-', false);
|
6726
6746
|
}
|
6727
6747
|
else if (fPlus == 1) {
|
6728
|
-
|
6729
|
-
ADVANCE(1);
|
6748
|
+
APPEND(' ', false);
|
6730
6749
|
}
|
6731
6750
|
else if (fPlus == 2) {
|
6732
|
-
|
6733
|
-
ADVANCE(1);
|
6751
|
+
APPEND('+', false);
|
6734
6752
|
}
|
6735
6753
|
|
6736
6754
|
n = a->Prec;
|
6737
6755
|
ex = a->exponent;
|
6738
6756
|
if (ex <= 0) {
|
6739
|
-
|
6740
|
-
|
6741
|
-
|
6742
|
-
|
6743
|
-
|
6744
|
-
|
6745
|
-
++ex;
|
6757
|
+
APPEND('0', false);
|
6758
|
+
APPEND('.', false);
|
6759
|
+
}
|
6760
|
+
while (ex < 0) {
|
6761
|
+
for (i=0; i < BASE_FIG; ++i) {
|
6762
|
+
APPEND('0', fFmt > 0);
|
6746
6763
|
}
|
6747
|
-
ex
|
6764
|
+
++ex;
|
6748
6765
|
}
|
6749
6766
|
|
6750
6767
|
for (i = 0; i < n; ++i) {
|
6751
|
-
|
6752
|
-
|
6753
|
-
|
6754
|
-
|
6755
|
-
ADVANCE(n);
|
6756
|
-
}
|
6757
|
-
else {
|
6758
|
-
m = BASE1;
|
6759
|
-
e = a->frac[i];
|
6760
|
-
while (m) {
|
6761
|
-
nn = e / m;
|
6762
|
-
*p = (char)(nn + '0');
|
6763
|
-
ADVANCE(1);
|
6764
|
-
e = e - nn * m;
|
6768
|
+
m = BASE1;
|
6769
|
+
e = a->frac[i];
|
6770
|
+
if (i == 0 && ex > 0) {
|
6771
|
+
for (delim = 0; e / m == 0; delim++) {
|
6765
6772
|
m /= 10;
|
6766
6773
|
}
|
6774
|
+
if (fFmt > 0) {
|
6775
|
+
delim = 2*fFmt - (ex * BASE_FIG - delim) % fFmt;
|
6776
|
+
}
|
6777
|
+
}
|
6778
|
+
while (m && (e || (i < n - 1) || ex > 0)) {
|
6779
|
+
APPEND((char)(e / m + '0'), fFmt > 0);
|
6780
|
+
e %= m;
|
6781
|
+
m /= 10;
|
6767
6782
|
}
|
6768
|
-
if (ex == 0) {
|
6769
|
-
|
6770
|
-
|
6783
|
+
if (--ex == 0) {
|
6784
|
+
APPEND('.', false);
|
6785
|
+
delim = fFmt;
|
6771
6786
|
}
|
6772
6787
|
}
|
6773
|
-
|
6774
|
-
|
6775
|
-
|
6776
|
-
|
6777
|
-
ADVANCE(1);
|
6788
|
+
|
6789
|
+
while (ex > 0) {
|
6790
|
+
for (i=0; i < BASE_FIG; ++i) {
|
6791
|
+
APPEND('0', fFmt > 0);
|
6778
6792
|
}
|
6779
|
-
if (ex == 0) {
|
6780
|
-
|
6781
|
-
ADVANCE(1);
|
6793
|
+
if (--ex == 0) {
|
6794
|
+
APPEND('.', false);
|
6782
6795
|
}
|
6783
6796
|
}
|
6784
6797
|
|
6785
6798
|
*p = '\0';
|
6786
|
-
while (p - 1 > buf && p[-1] == '0') {
|
6787
|
-
*(--p) = '\0';
|
6788
|
-
++plen;
|
6789
|
-
}
|
6790
6799
|
if (p - 1 > buf && p[-1] == '.') {
|
6791
6800
|
snprintf(p, plen, "0");
|
6792
6801
|
}
|
6793
|
-
if (fFmt) VpFormatSt(buf, fFmt);
|
6794
6802
|
|
6795
6803
|
overflow:
|
6796
6804
|
return;
|
6797
|
-
#undef
|
6805
|
+
#undef APPEND
|
6798
6806
|
}
|
6799
6807
|
|
6800
6808
|
/*
|
@@ -7171,7 +7179,6 @@ VpSqrt(Real *y, Real *x)
|
|
7171
7179
|
Real *r = NULL;
|
7172
7180
|
size_t y_prec;
|
7173
7181
|
SIGNED_VALUE n, e;
|
7174
|
-
SIGNED_VALUE prec;
|
7175
7182
|
ssize_t nr;
|
7176
7183
|
double val;
|
7177
7184
|
|
@@ -7210,12 +7217,6 @@ VpSqrt(Real *y, Real *x)
|
|
7210
7217
|
nr = 0;
|
7211
7218
|
y_prec = y->MaxPrec;
|
7212
7219
|
|
7213
|
-
prec = x->exponent - (ssize_t)y_prec;
|
7214
|
-
if (x->exponent > 0)
|
7215
|
-
++prec;
|
7216
|
-
else
|
7217
|
-
--prec;
|
7218
|
-
|
7219
7220
|
VpVtoD(&val, &e, x); /* val <- x */
|
7220
7221
|
e /= (SIGNED_VALUE)BASE_FIG;
|
7221
7222
|
n = e / 2;
|
data/lib/bigdecimal/util.rb
CHANGED
@@ -18,7 +18,7 @@ class Integer < Numeric
|
|
18
18
|
#
|
19
19
|
# 42.to_d # => 0.42e2
|
20
20
|
#
|
21
|
-
# See also BigDecimal
|
21
|
+
# See also Kernel.BigDecimal.
|
22
22
|
#
|
23
23
|
def to_d
|
24
24
|
BigDecimal(self)
|
@@ -45,7 +45,7 @@ class Float < Numeric
|
|
45
45
|
# 1.234.to_d # => 0.1234e1
|
46
46
|
# 1.234.to_d(2) # => 0.12e1
|
47
47
|
#
|
48
|
-
# See also BigDecimal
|
48
|
+
# See also Kernel.BigDecimal.
|
49
49
|
#
|
50
50
|
def to_d(precision=0)
|
51
51
|
BigDecimal(self, precision)
|
@@ -67,7 +67,7 @@ class String
|
|
67
67
|
# "123.45e1".to_d # => 0.12345e4
|
68
68
|
# "45.67 degrees".to_d # => 0.4567e2
|
69
69
|
#
|
70
|
-
# See also BigDecimal
|
70
|
+
# See also Kernel.BigDecimal.
|
71
71
|
#
|
72
72
|
def to_d
|
73
73
|
BigDecimal.interpret_loosely(self)
|
@@ -127,7 +127,7 @@ class Rational < Numeric
|
|
127
127
|
#
|
128
128
|
# Rational(22, 7).to_d(3) # => 0.314e1
|
129
129
|
#
|
130
|
-
# See also BigDecimal
|
130
|
+
# See also Kernel.BigDecimal.
|
131
131
|
#
|
132
132
|
def to_d(precision)
|
133
133
|
BigDecimal(self, precision)
|
@@ -152,7 +152,7 @@ class Complex < Numeric
|
|
152
152
|
# Complex(0.1234567, 0).to_d(4) # => 0.1235e0
|
153
153
|
# Complex(Rational(22, 7), 0).to_d(3) # => 0.314e1
|
154
154
|
#
|
155
|
-
# See also BigDecimal
|
155
|
+
# See also Kernel.BigDecimal.
|
156
156
|
#
|
157
157
|
def to_d(*args)
|
158
158
|
BigDecimal(self) unless self.imag.zero? # to raise eerror
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bigdecimal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kenta Murata
|
8
8
|
- Zachary Scott
|
9
9
|
- Shigeo Kobayashi
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-12-13 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: This library provides arbitrary-precision decimal floating-point number
|
16
16
|
class.
|
@@ -45,7 +45,7 @@ licenses:
|
|
45
45
|
- Ruby
|
46
46
|
- BSD-2-Clause
|
47
47
|
metadata: {}
|
48
|
-
post_install_message:
|
48
|
+
post_install_message:
|
49
49
|
rdoc_options: []
|
50
50
|
require_paths:
|
51
51
|
- lib
|
@@ -60,8 +60,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
requirements: []
|
63
|
-
rubygems_version: 3.3.
|
64
|
-
signing_key:
|
63
|
+
rubygems_version: 3.3.9
|
64
|
+
signing_key:
|
65
65
|
specification_version: 4
|
66
66
|
summary: Arbitrary-precision decimal floating-point number library.
|
67
67
|
test_files: []
|