```
Source File
math.go
Belonging Package
runtime/internal/math
```

`// Copyright 2018 The Go Authors. All rights reserved.`

`// Use of this source code is governed by a BSD-style`

`// license that can be found in the LICENSE file.`

`package math`

`import`

`const MaxUintptr = ^uintptr(0)`

`// MulUintptr returns a * b and whether the multiplication overflowed.`

`// On supported platforms this is an intrinsic lowered by the compiler.`

`func (, uintptr) (uintptr, bool) {`

`if | < 1<<(4*goarch.PtrSize) || == 0 {`

`return * , false`

`}`

`:= > MaxUintptr/`

`return * ,`

`}`

`// Mul64 returns the 128-bit product of x and y: (hi, lo) = x * y`

`// with the product bits' upper half returned in hi and the lower`

`// half returned in lo.`

`// This is a copy from math/bits.Mul64`

`// On supported platforms this is an intrinsic lowered by the compiler.`

`func (, uint64) (, uint64) {`

`const = 1<<32 - 1`

`:= &`

`:= >> 32`

`:= &`

`:= >> 32`

`:= *`

`:= * + >>32`

`:= &`

`:= >> 32`

`+= *`

`= * + + >>32`

`= *`

`return`

`}`

`// Add64 returns the sum with carry of x, y and carry: sum = x + y + carry.`

`// The carry input must be 0 or 1; otherwise the behavior is undefined.`

`// The carryOut output is guaranteed to be 0 or 1.`

`//`

`// This function's execution time does not depend on the inputs.`

`// On supported platforms this is an intrinsic lowered by the compiler.`

`func (, , uint64) (, uint64) {`

`= + +`

`// The sum will overflow if both top bits are set (x & y) or if one of them`

`// is (x | y), and a carry from the lower place happened. If such a carry`

`// happens, the top bit will be 1 + 0 + 1 = 0 (&^ sum).`

`= (( & ) | (( | ) &^ )) >> 63`

`return`

`}`

The pages are generated with Golds v0.6.9-preview. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |