From a43673cf8a237fa237c179aeb0862215b797b9df Mon Sep 17 00:00:00 2001 From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com> Date: Mon, 24 Mar 2014 10:10:29 -0700 Subject: [PATCH] cmd/gc: round floats with a large negative exponent towards zero Fixes #6902 LGTM=iant R=iant, rsc CC=golang-codereviews https://golang.org/cl/78730049 --- src/cmd/gc/mparith1.c | 3 ++- test/fixedbugs/issue6902.go | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/issue6902.go diff --git a/src/cmd/gc/mparith1.c b/src/cmd/gc/mparith1.c index 19310a7c8c2..a260a9964f5 100644 --- a/src/cmd/gc/mparith1.c +++ b/src/cmd/gc/mparith1.c @@ -427,7 +427,8 @@ mpatoflt(Mpflt *a, char *as) mppow10flt(&b, ex-dp); mpmulfltflt(a, &b); } else { - if((short)(dp-ex) != dp-ex) { + // 4 approximates least_upper_bound(log2(10)). + if(dp-ex >= (1<<(8*sizeof(dp)-3)) || (short)(4*(dp-ex)) != 4*(dp-ex)) { mpmovecflt(a, 0.0); } else { diff --git a/test/fixedbugs/issue6902.go b/test/fixedbugs/issue6902.go new file mode 100644 index 00000000000..5c2c545d2ca --- /dev/null +++ b/test/fixedbugs/issue6902.go @@ -0,0 +1,21 @@ +// run + +// Copyright 2014 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. + +// Issue 6902: confusing printing of large floating point constants + +package main + +import ( + "os" +) + +var x = -1e-10000 + +func main() { + if x != 0 { + os.Exit(1) + } +}