mirror of
https://github.com/golang/go
synced 2024-11-05 22:26:10 -07:00
47 lines
798 B
Go
47 lines
798 B
Go
|
// compile
|
||
|
|
||
|
// Copyright 2016 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.
|
||
|
|
||
|
// This tickles (a version of) the PPC64 back end to
|
||
|
// emit a BVS instruction.
|
||
|
|
||
|
package foo
|
||
|
|
||
|
type Flag int
|
||
|
|
||
|
const (
|
||
|
Identity Flag = iota - 2 // H is the identity matrix; no rotation is needed.
|
||
|
Rescaling // H specifies rescaling.
|
||
|
)
|
||
|
|
||
|
type DrotmParams struct {
|
||
|
Flag
|
||
|
}
|
||
|
|
||
|
func Drotmg(d1, d2, x1, y1 float64) (p DrotmParams, rd1, rd2, rx1 float64) {
|
||
|
|
||
|
const (
|
||
|
gam = 4.0
|
||
|
gamsq = 16.0
|
||
|
rgamsq = 5e-8
|
||
|
)
|
||
|
|
||
|
if d1 < 0 {
|
||
|
p.Flag = Rescaling
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for rd1 <= rgamsq || rd1 >= gamsq {
|
||
|
if rd1 <= rgamsq {
|
||
|
rd1 *= gam * gam
|
||
|
rx1 /= gam
|
||
|
} else {
|
||
|
rd1 /= gam * gam
|
||
|
rx1 *= gam
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|