[#100309] How to use backport custom field — Jun Aruga <jaruga@...>
Please allow my ignorance.
9 messages
2020/10/06
[#100310] Re: How to use backport custom field
— "NARUSE, Yui" <naruse@...>
2020/10/06
IkJhY2twb3J0IGN1c3RvbSBmaWVsZCIgaXMgb25seSBhdmFpbGFibGUgZm9yIHRpY2tldHMgd2hv
[#100311] Re: How to use backport custom field
— Jun Aruga <jaruga@...>
2020/10/06
On Tue, Oct 6, 2020 at 4:44 PM NARUSE, Yui <[email protected]> wrote:
[#100314] Re: How to use backport custom field
— "NARUSE, Yui" <naruse@...>
2020/10/06
VGhhbmsgeW91IGZvciBjb25maXJtYXRpb24uCkkgY2hlY2tlZCBhZ2FpbiBhbmQgdG8gZWRpdCBi
[#100322] Re: How to use backport custom field
— Jun Aruga <jaruga@...>
2020/10/07
On Tue, Oct 6, 2020 at 7:25 PM NARUSE, Yui <[email protected]> wrote:
[#100326] Re: How to use backport custom field
— "NARUSE, Yui" <naruse@...>
2020/10/07
SSBhZGRlZCB5b3UgdG8gIlJlcG9ydGVyIiByb2xlIGluIHRoZSBwcm9qZWN0CgoyMDIw5bm0MTDm
[#100327] Re: How to use backport custom field
— Jun Aruga <jaruga@...>
2020/10/07
On Wed, Oct 7, 2020 at 1:42 PM NARUSE, Yui <[email protected]> wrote:
[ruby-core:100299] [Ruby master Bug#17214] BigDecimal exponentiation gives incorrect results
From:
foldes.laszlo2@...
Date:
2020-10-05 11:16:01 UTC
List:
ruby-core #100299
Issue #17214 has been updated by karatedog (F=F6ldes L=E1szl=F3).
nobu (Nobuyoshi Nakada) wrote in #note-2:
> `BigDecimal` instances hold the precision, and it is not enough in that c=
ase.
> You need to override the default precision in some operations.
> ```ruby
> BigDecimal(2222).power(3.5, Float::DIG).to_i #=3D> 517135308457
> ```
If I increase the precision of the two arguments ("2222", "3.5"), but leave=
the operation's precision on default, the result still will be wrong.
So the good result relies only on the precision of the operation which is n=
ot straightforward immediately for the developer (because it will return a =
value).
To sum up:
1. Only #power can be used for proper exponentiation, as #** cannot be give=
n any argument and thus will give almost always wrong results if used with =
large numbers. Existing code might need to be rewritten, changing class fro=
m Float to BigDecimal will not be idempotent.
1. BigDecimal is advertised as an "arbitrary precision library" yet using t=
he defaults it is less precise than Float. This is misleading, it will bite=
newcomers in the back.
I think this should be documented and/or fine-tuned, the above two violates=
the Principle of Least Surprise.
----------------------------------------
Bug #17214: BigDecimal exponentiation gives incorrect results
https://bugs.ruby-lang.org/issues/17214#change-87884
* Author: karatedog (F=F6ldes L=E1szl=F3)
* Status: Rejected
* Priority: Normal
* ruby -v: ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
This is an incorrect value:
```ruby
(BigDecimal("2222") ** BigDecimal("3.5")).to_i
# =3D> 517135311000
```
This is the correct value (within Float precision):
```ruby
2222 ** 3.5
# =3D> 517135308457.25256
```
As the Base gets larger, the problem is more visible. Wrong value, number o=
f trailing zeroes increase:
```ruby
(BigDecimal("22222") ** BigDecimal("3.5")).to_i
# =3D> 1635840670000000
```
Nearing maximum Float precision:
```ruby
22222 ** 3.5
# =3D> 1635840670214066.5
```
-- =
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=3Dunsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>