import "unsafe"
-func float64toint64(d float64, y uint64) {
+const (
+ sign64 = 1 << (64 - 1)
+)
+
+func float64toint64(d float64) (y uint64) {
_d2v(&y, d)
+ return
}
-func float64touint64(d float64, y uint64) {
+func float64touint64(d float64) (y uint64) {
_d2v(&y, d)
+ return
}
-const (
- sign64 = 1 << (64 - 1)
-)
+func int64tofloat64(y int64) float64 {
+ if y < 0 {
+ return -uint64tofloat64(-uint64(y))
+ }
+ return uint64tofloat64(uint64(y))
+}
+
+func uint64tofloat64(y uint64) float64 {
+ hi := float64(uint32(y >> 32))
+ lo := float64(uint32(y))
+ d := hi*(1<<32) + lo
+ return d
+}
func _d2v(y *uint64, d float64) {
x := *(*uint64)(unsafe.Pointer(&d))
return _v2d(x);
}
-void
-runtimeĀ·int64tofloat64(Vlong y, double d)
-{
- d = _v2d(y);
- USED(&d); // FLUSH
-}
-
-void
-runtimeĀ·uint64tofloat64(Vlong y, double d)
-{
- d = _ul2d(y.hi)*4294967296. + _ul2d(y.lo);
- USED(&d); // FLUSH
-}
-
static void
dodiv(Vlong num, Vlong den, Vlong *q, Vlong *r)
{