]> Cypherpunks repositories - gostls13.git/commitdiff
math/bits: define Div to panic when y<=hi
authorBrian Kessler <brian.m.kessler@gmail.com>
Wed, 14 Nov 2018 05:51:21 +0000 (22:51 -0700)
committerKeith Randall <khr@golang.org>
Tue, 27 Nov 2018 05:04:33 +0000 (05:04 +0000)
Div panics when y<=hi because either the quotient overflows
the size of the output or division by zero occurs when y==0.
This provides a uniform behavior for all implementations.

Fixes #28316

Change-Id: If23aeb10e0709ee1a60b7d614afc9103d674a980
Reviewed-on: https://go-review.googlesource.com/c/149517
Reviewed-by: Robert Griesemer <gri@golang.org>
src/math/bits/bits.go

index fbf49661573915a612db17511ce38782917bce80..9da1c6e580a99ea0f1e1e58c5ff9c69142bc6dd8 100644 (file)
@@ -454,8 +454,7 @@ func Mul64(x, y uint64) (hi, lo uint64) {
 // Div returns the quotient and remainder of (hi, lo) divided by y:
 // quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper
 // half in parameter hi and the lower half in parameter lo.
-// hi must be < y otherwise the behavior is undefined (the quotient
-// won't fit into quo).
+// Div panics for y == 0 (division by zero) or y <= hi (quotient overflow).
 func Div(hi, lo, y uint) (quo, rem uint) {
        if UintSize == 32 {
                q, r := Div32(uint32(hi), uint32(lo), uint32(y))
@@ -468,8 +467,7 @@ func Div(hi, lo, y uint) (quo, rem uint) {
 // Div32 returns the quotient and remainder of (hi, lo) divided by y:
 // quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper
 // half in parameter hi and the lower half in parameter lo.
-// hi must be < y otherwise the behavior is undefined (the quotient
-// won't fit into quo).
+// Div32 panics for y == 0 (division by zero) or y <= hi (quotient overflow).
 func Div32(hi, lo, y uint32) (quo, rem uint32) {
        if y != 0 && y <= hi {
                panic(overflowError)
@@ -482,8 +480,7 @@ func Div32(hi, lo, y uint32) (quo, rem uint32) {
 // Div64 returns the quotient and remainder of (hi, lo) divided by y:
 // quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper
 // half in parameter hi and the lower half in parameter lo.
-// hi must be < y otherwise the behavior is undefined (the quotient
-// won't fit into quo).
+// Div64 panics for y == 0 (division by zero) or y <= hi (quotient overflow).
 func Div64(hi, lo, y uint64) (quo, rem uint64) {
        const (
                two32  = 1 << 32