# factorial(21) and Mac System Ruby

> Last updated: 2012-11-02

I just got a new macbook air and discovered this problem with the
system ruby. Here's a simple implementation of factorial. 

```ruby
def fact(n)
  return 1 if n.between?(0, 1)
  (2..n).inject(:*)
end
```

When you run it in irb it does what you'd expect:

```ruby
>> fact(1)
=> 1
>> fact(0)
=> 1
>> fact(2)
=> 2
>> fact(5)
=> 120
>> fact(10)
=> 3628800
>> fact(20)
=> 2432902008176640000
```

Until the result won't fit in a Fixnum and needs to fit in a big
num. Then it overflows.

```ruby
>> fact(21)
=> -4249290049419214848
```

My macbook shipped with this version of ruby.

```shell
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
```

This bug isn't in ruby, its in the version that Apple is shipping on
the newest macbooks. Using rbenv I installed the same patch version
and re-ran the factorials.

```ruby
>>fact(1)
=> 1
>>fact(20)
=> 2432902008176640000
>>fact(21)
=> 51090942171709440000
```
