[#100284] [Ruby master Bug#17211] Test failures in ruby2.7.2 and ruby3.0~preview1 — utkarsh@...

Issue #17211 has been reported by utkarsh (Utkarsh Gupta).

10 messages 2020/10/02

[#100301] [Ruby master Feature#17215] Backport for arm64 optimizations that exist for power/x86 — jaruga@...

Issue #17215 has been reported by jaruga (Jun Aruga).

10 messages 2020/10/05

[#100329] [Ruby master Bug#17220] Rails Active Job integration test fails with Ruby 3.0.0 since 2038cc6cab6ceeffef3ec3a765c70ae684f829ed — yasuo.honda@...

Issue #17220 has been reported by yahonda (Yasuo Honda).

28 messages 2020/10/07

[#100332] [Ruby master Bug#17221] Relax the Fiber#transfer's limitation — ko1@...

Issue #17221 has been reported by ko1 (Koichi Sasada).

15 messages 2020/10/07

[#100348] [Ruby master Bug#17257] Integer#pow(0, 1) returns 1, which is incorrect — universato@...

Issue #17257 has been reported by universato (Yoshimine Sato).

13 messages 2020/10/09

[#100371] [Ruby master Feature#17260] Promote pattern matching to official feature — kazuki@...

Issue #17260 has been reported by ktsj (Kazuki Tsujimoto).

10 messages 2020/10/11

[#100383] [Ruby master Feature#17261] Software transactional memory (STM) for Threads and Ractors — ko1@...

Issue #17261 has been reported by ko1 (Koichi Sasada).

14 messages 2020/10/12

[#100401] [Ruby master Bug#17263] Fiber context switch degrades with number of fibers, limit on number of fibers — ciconia@...

Issue #17263 has been reported by ciconia (Sharon Rosner).

14 messages 2020/10/15

[#100422] [CommonRuby Feature#17265] Add `Bool` module — marcandre-ruby-core@...

Issue #17265 has been reported by marcandre (Marc-Andre Lafortune).

11 messages 2020/10/19

[#100466] [Ruby master Feature#17273] shareable_constant_value pragma — ko1@...

Issue #17273 has been reported by ko1 (Koichi Sasada).

14 messages 2020/10/21

[#100471] [Ruby master Feature#17277] Make Enumerator#with_index yield row and col indices for Matrix — grzegorz.jakubiak@...

Issue #17277 has been reported by greggzst (Grzegorz Jakubiak).

8 messages 2020/10/21

[#100479] [Ruby master Feature#17278] On-demand sharing of constants for Ractor — daniel@...42.com

Issue #17278 has been reported by Dan0042 (Daniel DeLorme).

13 messages 2020/10/21

[#100534] [Ruby master Feature#17284] Shareable Proc — ko1@...

Issue #17284 has been reported by ko1 (Koichi Sasada).

16 messages 2020/10/25

[#100597] [Ruby master Feature#17288] Optimize __send__ call with a literal method name — muraken@...

Issue #17288 has been reported by mrkn (Kenta Murata).

13 messages 2020/10/27

[#100669] [Ruby master Feature#17295] Feature: Create a directory and file with Pathname#touch — get.codetriage@...

Issue #17295 has been reported by schneems (Richard Schneeman).

9 messages 2020/10/30

[#100673] [Ruby master Feature#17298] Ractor's basket communication APIs — ko1@...

Issue #17298 has been reported by ko1 (Koichi Sasada).

15 messages 2020/10/30

[#100675] [Ruby master Misc#17299] DevelopersMeeting20201120Japan — mame@...

Issue #17299 has been reported by mame (Yusuke Endoh).

11 messages 2020/10/31

[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des L疽zl.


nobu (Nobuyoshi Nakada) wrote in #note-2:
> `BigDecimal` instances hold the precision, and it is not enough in that case.
> You need to override the default precision in some operations.
> ```ruby
> BigDecimal(2222).power(3.5, Float::DIG).to_i #=> 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 not 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 given any argument and thus will give almost always wrong results if used with large numbers. Existing code might need to be rewritten, changing class from Float to BigDecimal will not be idempotent.
1. BigDecimal is advertised as an "arbitrary precision library" yet using the 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des L疽zl鶇
* 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
# => 517135311000
```

This is the correct value (within Float precision):

```ruby
2222 ** 3.5
# => 517135308457.25256
```

As the Base gets larger, the problem is more visible. Wrong value, number of trailing zeroes increase:

```ruby
(BigDecimal("22222") ** BigDecimal("3.5")).to_i
# => 1635840670000000
```

Nearing maximum Float precision:

```ruby
22222 ** 3.5
# => 1635840670214066.5
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next