Issue #13146 has been updated by Stefan Schler.


Somehow, using `-Float::NAN` in a hash or array results in new objects being created:

```ruby
-Float::NAN.object_id
#=> -70362448918680
[-Float::NAN, -Float::NAN, -Float::NAN].map(&:object_id)
#=> [70362448604580, 70362448604520, 70362448604500]
```

As a result, these objects are no longer equal.

`Float::NAN` on the other hand behaves as expected:

```ruby
Float::NAN.object_id  
#=> 70362448918680
[Float::NAN, Float::NAN, Float::NAN].map(&:object_id)
#=> [70362448918680, 70362448918680, 70362448918680]
```

The same happens with `-Float:INFINITY`.

----------------------------------------
Bug #13146: Float::NANs in Hashes are confusing (more than usual). 
https://bugs.ruby-lang.org/issues/13146#change-62686

* Author: Linus Sellberg
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.3.1p112
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
`test = {Float::NAN => 1, -Float::NAN => 2}
=> {NaN=>1, NaN=>2}

test.values_at(Float::NAN, -Float::NAN)
=> [1, nil]`

I don't know what the correct behaviour ought to be, but it seems inconsistent to create a hash with two elements but not be able to extract both values.



-- 
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>