bigdecimal 3.1.4 → 3.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +56 -0
- data/bigdecimal.gemspec +1 -0
- data/ext/bigdecimal/bigdecimal.c +71 -70
- data/lib/bigdecimal/util.rb +5 -5
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5b29096324f4d5c2effbe82e606b7c4d15dcfc51d447f387389fd2a30a0a399
|
4
|
+
data.tar.gz: 7430f646c26f19d709da049de86dc3befe2226900d7eb246ae6aa74fa40be284
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6eb24b2bdde0a88af4df1fd80eaa5553a4dfbba55351c8f9b4c9b4124e7c77d7ac1ea0579d5c2b4a30ecd23ebf0e9bdb436624888cd4e02f87e0a295391a9c3
|
7
|
+
data.tar.gz: 7c4f70bfdc422a0188c8f99aeaaf5002475457859bbe0a7d2bed95d06c61b47fa89deec2bb5f3e633858f3abe18d4ca374f22b2779a256a50e110370e067e0e1
|
data/LICENSE
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a) place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b) use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c) give non-standard binaries non-standard names, with
|
21
|
+
instructions on where to get the original software distribution.
|
22
|
+
|
23
|
+
d) make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or binary form,
|
26
|
+
provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a) distribute the binaries and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b) accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c) give non-standard binaries non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d) make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under these terms.
|
43
|
+
|
44
|
+
For the list of those files and their copying conditions, see the
|
45
|
+
file LEGAL.
|
46
|
+
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
48
|
+
output from the software do not automatically fall under the
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
51
|
+
software.
|
52
|
+
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
56
|
+
PURPOSE.
|
data/bigdecimal.gemspec
CHANGED
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.6"
|
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;
|
@@ -7229,7 +7230,7 @@ VpSqrt(Real *y, Real *x)
|
|
7229
7230
|
y->MaxPrec = Min((size_t)n , y_prec);
|
7230
7231
|
f->MaxPrec = y->MaxPrec + 1;
|
7231
7232
|
n = (SIGNED_VALUE)(y_prec * BASE_FIG);
|
7232
|
-
if (n
|
7233
|
+
if (n > (SIGNED_VALUE)maxnr) n = (SIGNED_VALUE)maxnr;
|
7233
7234
|
|
7234
7235
|
/*
|
7235
7236
|
* Perform: y_{n+1} = (y_n - x/y_n) / 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.6
|
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:
|
13
|
+
date: 2024-01-18 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: This library provides arbitrary-precision decimal floating-point number
|
16
16
|
class.
|
@@ -21,6 +21,7 @@ extensions:
|
|
21
21
|
- ext/bigdecimal/extconf.rb
|
22
22
|
extra_rdoc_files: []
|
23
23
|
files:
|
24
|
+
- LICENSE
|
24
25
|
- bigdecimal.gemspec
|
25
26
|
- ext/bigdecimal/bigdecimal.c
|
26
27
|
- ext/bigdecimal/bigdecimal.h
|
@@ -45,7 +46,7 @@ licenses:
|
|
45
46
|
- Ruby
|
46
47
|
- BSD-2-Clause
|
47
48
|
metadata: {}
|
48
|
-
post_install_message:
|
49
|
+
post_install_message:
|
49
50
|
rdoc_options: []
|
50
51
|
require_paths:
|
51
52
|
- lib
|
@@ -60,8 +61,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
61
|
- !ruby/object:Gem::Version
|
61
62
|
version: '0'
|
62
63
|
requirements: []
|
63
|
-
rubygems_version: 3.
|
64
|
-
signing_key:
|
64
|
+
rubygems_version: 3.6.0.dev
|
65
|
+
signing_key:
|
65
66
|
specification_version: 4
|
66
67
|
summary: Arbitrary-precision decimal floating-point number library.
|
67
68
|
test_files: []
|