| // run | |
| // 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. | |
| // (-0)+0 should be 0, not -0. | |
| package main | |
| //go:noinline | |
| func add64(x float64) float64 { | |
| return x + 0 | |
| } | |
| func testAdd64() { | |
| var zero float64 | |
| inf := 1.0 / zero | |
| negZero := -1 / inf | |
| if 1/add64(negZero) != inf { | |
| panic("negZero+0 != posZero (64 bit)") | |
| } | |
| } | |
| //go:noinline | |
| func sub64(x float64) float64 { | |
| return x - 0 | |
| } | |
| func testSub64() { | |
| var zero float64 | |
| inf := 1.0 / zero | |
| negZero := -1 / inf | |
| if 1/sub64(negZero) != -inf { | |
| panic("negZero-0 != negZero (64 bit)") | |
| } | |
| } | |
| //go:noinline | |
| func neg64(x float64) float64 { | |
| return -x | |
| } | |
| func testNeg64() { | |
| var zero float64 | |
| inf := 1.0 / zero | |
| negZero := -1 / inf | |
| if 1/neg64(negZero) != inf { | |
| panic("-negZero != posZero (64 bit)") | |
| } | |
| } | |
| //go:noinline | |
| func add32(x float32) float32 { | |
| return x + 0 | |
| } | |
| func testAdd32() { | |
| var zero float32 | |
| inf := 1.0 / zero | |
| negZero := -1 / inf | |
| if 1/add32(negZero) != inf { | |
| panic("negZero+0 != posZero (32 bit)") | |
| } | |
| } | |
| //go:noinline | |
| func sub32(x float32) float32 { | |
| return x - 0 | |
| } | |
| func testSub32() { | |
| var zero float32 | |
| inf := 1.0 / zero | |
| negZero := -1 / inf | |
| if 1/sub32(negZero) != -inf { | |
| panic("negZero-0 != negZero (32 bit)") | |
| } | |
| } | |
| //go:noinline | |
| func neg32(x float32) float32 { | |
| return -x | |
| } | |
| func testNeg32() { | |
| var zero float32 | |
| inf := 1.0 / zero | |
| negZero := -1 / inf | |
| if 1/neg32(negZero) != inf { | |
| panic("-negZero != posZero (32 bit)") | |
| } | |
| } | |
| func main() { | |
| testAdd64() | |
| testSub64() | |
| testNeg64() | |
| testAdd32() | |
| testSub32() | |
| testNeg32() | |
| } |