mirror of
https://github.com/golang/go
synced 2024-11-27 00:41:31 -07:00
math/bits: define Div to panic when y<=hi
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>
This commit is contained in:
parent
319787a528
commit
979d9027ae
@ -454,8 +454,7 @@ func Mul64(x, y uint64) (hi, lo uint64) {
|
|||||||
// Div returns the quotient and remainder of (hi, lo) divided by y:
|
// 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
|
// quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper
|
||||||
// half in parameter hi and the lower half in parameter lo.
|
// half in parameter hi and the lower half in parameter lo.
|
||||||
// hi must be < y otherwise the behavior is undefined (the quotient
|
// Div panics for y == 0 (division by zero) or y <= hi (quotient overflow).
|
||||||
// won't fit into quo).
|
|
||||||
func Div(hi, lo, y uint) (quo, rem uint) {
|
func Div(hi, lo, y uint) (quo, rem uint) {
|
||||||
if UintSize == 32 {
|
if UintSize == 32 {
|
||||||
q, r := Div32(uint32(hi), uint32(lo), uint32(y))
|
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:
|
// 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
|
// quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper
|
||||||
// half in parameter hi and the lower half in parameter lo.
|
// half in parameter hi and the lower half in parameter lo.
|
||||||
// hi must be < y otherwise the behavior is undefined (the quotient
|
// Div32 panics for y == 0 (division by zero) or y <= hi (quotient overflow).
|
||||||
// won't fit into quo).
|
|
||||||
func Div32(hi, lo, y uint32) (quo, rem uint32) {
|
func Div32(hi, lo, y uint32) (quo, rem uint32) {
|
||||||
if y != 0 && y <= hi {
|
if y != 0 && y <= hi {
|
||||||
panic(overflowError)
|
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:
|
// 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
|
// quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper
|
||||||
// half in parameter hi and the lower half in parameter lo.
|
// half in parameter hi and the lower half in parameter lo.
|
||||||
// hi must be < y otherwise the behavior is undefined (the quotient
|
// Div64 panics for y == 0 (division by zero) or y <= hi (quotient overflow).
|
||||||
// won't fit into quo).
|
|
||||||
func Div64(hi, lo, y uint64) (quo, rem uint64) {
|
func Div64(hi, lo, y uint64) (quo, rem uint64) {
|
||||||
const (
|
const (
|
||||||
two32 = 1 << 32
|
two32 = 1 << 32
|
||||||
|
Loading…
Reference in New Issue
Block a user