| // 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. | 
 |  | 
 | package main | 
 |  | 
 | import ( | 
 | 	"math" | 
 | ) | 
 |  | 
 | type S struct { | 
 | 	u int64 | 
 | 	n int32 | 
 | } | 
 |  | 
 | func F1(f float64) *S { | 
 | 	s := f | 
 | 	pf := math.Copysign(f, 1) | 
 | 	u := math.Floor(pf) | 
 | 	return &S{ | 
 | 		u: int64(math.Copysign(u, s)), | 
 | 		n: int32(math.Copysign((pf-u)*1e9, s)), | 
 | 	} | 
 | } | 
 |  | 
 | func F2(f float64) *S { | 
 | 	s := f | 
 | 	f = math.Copysign(f, 1) | 
 | 	u := math.Floor(f) | 
 | 	return &S{ | 
 | 		u: int64(math.Copysign(u, s)), | 
 | 		n: int32(math.Copysign((f-u)*1e9, s)), | 
 | 	} | 
 | } | 
 |  | 
 | func main() { | 
 | 	s1 := F1(-1) | 
 | 	s2 := F2(-1) | 
 | 	if *s1 != *s2 { | 
 | 		println("F1:", s1.u, s1.n) | 
 | 		println("F2:", s2.u, s2.n) | 
 | 		panic("different") | 
 | 	} | 
 | } |