diff --git a/src/go/constant/value.go b/src/go/constant/value.go index 223c363d9b..2ed6115d1b 100644 --- a/src/go/constant/value.go +++ b/src/go/constant/value.go @@ -871,9 +871,9 @@ func ToInt(x Value) Value { func ToFloat(x Value) Value { switch x := x.(type) { case int64Val: - return i64tof(x) + return i64tor(x) case intVal: - return itof(x) + return itor(x) case ratVal, floatVal: return x case complexVal: diff --git a/test/fixedbugs/issue43908.go b/test/fixedbugs/issue43908.go new file mode 100644 index 0000000000..47709eb191 --- /dev/null +++ b/test/fixedbugs/issue43908.go @@ -0,0 +1,21 @@ +// run + +// Copyright 2021 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. + +// Verify exact constant evaluation independent of +// (mathematically equivalent) expression form. + +package main + +import "fmt" + +const ulp1 = imag(1i + 2i / 3 - 5i / 3) +const ulp2 = imag(1i + complex(0, 2) / 3 - 5i / 3) + +func main() { + if ulp1 != ulp2 { + panic(fmt.Sprintf("%g != %g\n", ulp1, ulp2)) + } +}