1// Copyright ©2019 The Gonum Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package gonum 6 7// Dcombssq adds two scaled sum-of-squares quantities, V := V1 + V2, 8// V_scale^2 * V_ssq := V1_scale^2 * V1_ssq + V2_scale^2 * V2_ssq 9// and returns the result V. 10// 11// Dcombssq is an internal routine. It is exported for testing purposes. 12func (Implementation) Dcombssq(scale1, ssq1, scale2, ssq2 float64) (scale, ssq float64) { 13 if scale1 >= scale2 { 14 if scale1 != 0 { 15 return scale1, ssq1 + (scale2/scale1)*(scale2/scale1)*ssq2 16 } 17 // If the input is non-negative and we are here, then scale2 must inevitably be 0, too. 18 return 0, 0 19 } 20 return scale2, ssq2 + (scale1/scale2)*(scale1/scale2)*ssq1 21} 22