The Go Programming Language

Source file src/pkg/math/nextafter.go

     1	// Copyright 2010 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package math
     6	
     7	// Nextafter returns the next representable value after x towards y.
     8	// If x == y, then x is returned.
     9	//
    10	// Special cases are:
    11	//	Nextafter(NaN, y) = NaN
    12	//	Nextafter(x, NaN) = NaN
    13	func Nextafter(x, y float64) (r float64) {
    14		// TODO(rsc): Remove manual inlining of IsNaN
    15		// when compiler does it for us
    16		switch {
    17		case x != x || y != y: // IsNaN(x) || IsNaN(y): // special case
    18			r = NaN()
    19		case x == y:
    20			r = x
    21		case x == 0:
    22			r = Copysign(Float64frombits(1), y)
    23		case (y > x) == (x > 0):
    24			r = Float64frombits(Float64bits(x) + 1)
    25		default:
    26			r = Float64frombits(Float64bits(x) - 1)
    27		}
    28		return r
    29	}

release.r60.3. Except as noted, this content is licensed under a Creative Commons Attribution 3.0 License.