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.
7 // Nextafter32 returns the next representable float32 value after x towards y.
9 // Nextafter32(x, x) = x
10 // Nextafter32(NaN, y) = NaN
11 // Nextafter32(x, NaN) = NaN
12 func Nextafter32(x
, y
float32) (r
float32) {
14 case IsNaN(float64(x
)) ||
IsNaN(float64(y
)): // special case
19 r
= float32(Copysign(float64(Float32frombits(1)), float64(y
)))
20 case (y
> x
) == (x
> 0):
21 r
= Float32frombits(Float32bits(x
) + 1)
23 r
= Float32frombits(Float32bits(x
) - 1)
28 // Nextafter returns the next representable float64 value after x towards y.
30 // Nextafter64(x, x) = x
31 // Nextafter64(NaN, y) = NaN
32 // Nextafter64(x, NaN) = NaN
33 func Nextafter(x
, y
float64) (r
float64) {
35 case IsNaN(x
) ||
IsNaN(y
): // special case
40 r
= Copysign(Float64frombits(1), y
)
41 case (y
> x
) == (x
> 0):
42 r
= Float64frombits(Float64bits(x
) + 1)
44 r
= Float64frombits(Float64bits(x
) - 1)