// 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 native 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 }