// 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() }