From 527713541a36301f3bf3ecd790cb3cc5e967a618 Mon Sep 17 00:00:00 2001 From: jbranchaud Date: Fri, 21 Aug 2015 11:03:27 -0500 Subject: [PATCH] Add When Overflow Is Desired as a clojure til. --- README.md | 1 + clojure/when-overflow-is-desired.md | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 clojure/when-overflow-is-desired.md diff --git a/README.md b/README.md index 6766a1f..837a8a5 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ smart people at [Hashrocket](http://hashrocket.com/). - [Splitting On Whitespace](clojure/splitting-on-whitespace.md) - [Swap Two Items in a Vector](clojure/swap-two-items-in-a-vector.md) - [Type of Anything](clojure/type-of-anything.md) +- [When Overflow Is Desired](clojure/when-overflow-is-desired.md) ### devops diff --git a/clojure/when-overflow-is-desired.md b/clojure/when-overflow-is-desired.md new file mode 100644 index 0000000..4eebba0 --- /dev/null +++ b/clojure/when-overflow-is-desired.md @@ -0,0 +1,18 @@ +# When Overflow Is Desired + +If you try to add two `MAX_VALUE` Longs, Clojure is kind enough to warn you. + +```clojure +> (+ Long/MAX_VALUE Long/MAX_VALUE) +ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Numbers.java:1424) +``` + +However, when overflow is desired, you can use the *unchecked* operators +(e.g. `unchecked-add`). + +```clojure +> (unchecked-add Long/MAX_VALUE Long/MAX_VALUE) +-2 +``` + +See also `unchecked-subtract` and `unchecked-multiply`.