OSDN Git Service

fix commands
[bytom/shuttle.git] / vendor / github.com / bytom / vendor / gonum.org / v1 / gonum / lapack / gonum / dlassq.go
diff --git a/vendor/github.com/bytom/vendor/gonum.org/v1/gonum/lapack/gonum/dlassq.go b/vendor/github.com/bytom/vendor/gonum.org/v1/gonum/lapack/gonum/dlassq.go
new file mode 100644 (file)
index 0000000..5a7f870
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright ©2015 The Gonum 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 gonum
+
+import "math"
+
+// Dlassq updates a sum of squares in scaled form. The input parameters scale and
+// sumsq represent the current scale and total sum of squares. These values are
+// updated with the information in the first n elements of the vector specified
+// by x and incX.
+//
+// Dlassq is an internal routine. It is exported for testing purposes.
+func (impl Implementation) Dlassq(n int, x []float64, incx int, scale float64, sumsq float64) (scl, smsq float64) {
+       if n <= 0 {
+               return scale, sumsq
+       }
+       for ix := 0; ix <= (n-1)*incx; ix += incx {
+               absxi := math.Abs(x[ix])
+               if absxi > 0 || math.IsNaN(absxi) {
+                       if scale < absxi {
+                               sumsq = 1 + sumsq*(scale/absxi)*(scale/absxi)
+                               scale = absxi
+                       } else {
+                               sumsq += (absxi / scale) * (absxi / scale)
+                       }
+               }
+       }
+       return scale, sumsq
+}