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 {
--- /dev/null
+// 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)
+ }
+}