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