github.com/jingcheng-WU/gonum@v0.9.1-0.20210323123734-f1a2a11a8f7b/internal/asm/f64/stubs_amd64.go (about)

     1  // Copyright ©2015 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  
     5  // +build !noasm,!gccgo,!safe
     6  
     7  package f64
     8  
     9  // L1Norm is
    10  //  for _, v := range x {
    11  //  	sum += math.Abs(v)
    12  //  }
    13  //  return sum
    14  func L1Norm(x []float64) (sum float64)
    15  
    16  // L1NormInc is
    17  //  for i := 0; i < n*incX; i += incX {
    18  //  	sum += math.Abs(x[i])
    19  //  }
    20  //  return sum
    21  func L1NormInc(x []float64, n, incX int) (sum float64)
    22  
    23  // AddConst is
    24  //  for i := range x {
    25  //  	x[i] += alpha
    26  //  }
    27  func AddConst(alpha float64, x []float64)
    28  
    29  // Add is
    30  //  for i, v := range s {
    31  //  	dst[i] += v
    32  //  }
    33  func Add(dst, s []float64)
    34  
    35  // AxpyUnitary is
    36  //  for i, v := range x {
    37  //  	y[i] += alpha * v
    38  //  }
    39  func AxpyUnitary(alpha float64, x, y []float64)
    40  
    41  // AxpyUnitaryTo is
    42  //  for i, v := range x {
    43  //  	dst[i] = alpha*v + y[i]
    44  //  }
    45  func AxpyUnitaryTo(dst []float64, alpha float64, x, y []float64)
    46  
    47  // AxpyInc is
    48  //  for i := 0; i < int(n); i++ {
    49  //  	y[iy] += alpha * x[ix]
    50  //  	ix += incX
    51  //  	iy += incY
    52  //  }
    53  func AxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
    54  
    55  // AxpyIncTo is
    56  //  for i := 0; i < int(n); i++ {
    57  //  	dst[idst] = alpha*x[ix] + y[iy]
    58  //  	ix += incX
    59  //  	iy += incY
    60  //  	idst += incDst
    61  //  }
    62  func AxpyIncTo(dst []float64, incDst, idst uintptr, alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
    63  
    64  // CumSum is
    65  //  if len(s) == 0 {
    66  //  	return dst
    67  //  }
    68  //  dst[0] = s[0]
    69  //  for i, v := range s[1:] {
    70  //  	dst[i+1] = dst[i] + v
    71  //  }
    72  //  return dst
    73  func CumSum(dst, s []float64) []float64
    74  
    75  // CumProd is
    76  //  if len(s) == 0 {
    77  //  	return dst
    78  //  }
    79  //  dst[0] = s[0]
    80  //  for i, v := range s[1:] {
    81  //  	dst[i+1] = dst[i] * v
    82  //  }
    83  //  return dst
    84  func CumProd(dst, s []float64) []float64
    85  
    86  // Div is
    87  //  for i, v := range s {
    88  //  	dst[i] /= v
    89  //  }
    90  func Div(dst, s []float64)
    91  
    92  // DivTo is
    93  //  for i, v := range s {
    94  //  	dst[i] = v / t[i]
    95  //  }
    96  //  return dst
    97  func DivTo(dst, x, y []float64) []float64
    98  
    99  // DotUnitary is
   100  //  for i, v := range x {
   101  //  	sum += y[i] * v
   102  //  }
   103  //  return sum
   104  func DotUnitary(x, y []float64) (sum float64)
   105  
   106  // DotInc is
   107  //  for i := 0; i < int(n); i++ {
   108  //  	sum += y[iy] * x[ix]
   109  //  	ix += incX
   110  //  	iy += incY
   111  //  }
   112  //  return sum
   113  func DotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
   114  
   115  // L1Dist is
   116  //  var norm float64
   117  //  for i, v := range s {
   118  //  	norm += math.Abs(t[i] - v)
   119  //  }
   120  //  return norm
   121  func L1Dist(s, t []float64) float64
   122  
   123  // LinfDist is
   124  //  var norm float64
   125  //  if len(s) == 0 {
   126  //  	return 0
   127  //  }
   128  //  norm = math.Abs(t[0] - s[0])
   129  //  for i, v := range s[1:] {
   130  //  	absDiff := math.Abs(t[i+1] - v)
   131  //  	if absDiff > norm || math.IsNaN(norm) {
   132  //  		norm = absDiff
   133  //  	}
   134  //  }
   135  //  return norm
   136  func LinfDist(s, t []float64) float64
   137  
   138  // ScalUnitary is
   139  //  for i := range x {
   140  //  	x[i] *= alpha
   141  //  }
   142  func ScalUnitary(alpha float64, x []float64)
   143  
   144  // ScalUnitaryTo is
   145  //  for i, v := range x {
   146  //  	dst[i] = alpha * v
   147  //  }
   148  func ScalUnitaryTo(dst []float64, alpha float64, x []float64)
   149  
   150  // ScalInc is
   151  //  var ix uintptr
   152  //  for i := 0; i < int(n); i++ {
   153  //  	x[ix] *= alpha
   154  //  	ix += incX
   155  //  }
   156  func ScalInc(alpha float64, x []float64, n, incX uintptr)
   157  
   158  // ScalIncTo is
   159  //  var idst, ix uintptr
   160  //  for i := 0; i < int(n); i++ {
   161  //  	dst[idst] = alpha * x[ix]
   162  //  	ix += incX
   163  //  	idst += incDst
   164  //  }
   165  func ScalIncTo(dst []float64, incDst uintptr, alpha float64, x []float64, n, incX uintptr)
   166  
   167  // Sum is
   168  //  var sum float64
   169  //  for i := range x {
   170  //      sum += x[i]
   171  //  }
   172  func Sum(x []float64) float64
   173  
   174  // L2NormUnitary returns the L2-norm of x.
   175  //   var scale float64
   176  //   sumSquares := 1.0
   177  //   for _, v := range x {
   178  //   	if v == 0 {
   179  //   		continue
   180  //   	}
   181  //   	absxi := math.Abs(v)
   182  //   	if math.IsNaN(absxi) {
   183  //   		return math.NaN()
   184  //   	}
   185  //   	if scale < absxi {
   186  //   		s := scale / absxi
   187  //   		sumSquares = 1 + sumSquares*s*s
   188  //   		scale = absxi
   189  //   	} else {
   190  //   		s := absxi / scale
   191  //   		sumSquares += s * s
   192  //   	}
   193  // 	  	if math.IsInf(scale, 1) {
   194  // 		  	return math.Inf(1)
   195  // 	  	}
   196  //   }
   197  //   return scale * math.Sqrt(sumSquares)
   198  func L2NormUnitary(x []float64) (norm float64)
   199  
   200  // L2NormInc returns the L2-norm of x.
   201  // 	var scale float64
   202  // 	sumSquares := 1.0
   203  // 	for ix := uintptr(0); ix < n*incX; ix += incX {
   204  // 		val := x[ix]
   205  // 		if val == 0 {
   206  // 			continue
   207  // 		}
   208  // 		absxi := math.Abs(val)
   209  // 		if math.IsNaN(absxi) {
   210  // 			return math.NaN()
   211  // 		}
   212  // 		if scale < absxi {
   213  // 			s := scale / absxi
   214  // 			sumSquares = 1 + sumSquares*s*s
   215  // 			scale = absxi
   216  // 		} else {
   217  // 			s := absxi / scale
   218  // 			sumSquares += s * s
   219  // 		}
   220  // 	}
   221  // 	if math.IsInf(scale, 1) {
   222  // 		return math.Inf(1)
   223  // 	}
   224  // 	return scale * math.Sqrt(sumSquares)
   225  func L2NormInc(x []float64, n, incX uintptr) (norm float64)
   226  
   227  // L2DistanceUnitary returns the L2-norm of x-y.
   228  // 	var scale float64
   229  // 	sumSquares := 1.0
   230  // 	for i, v := range x {
   231  // 		v -= y[i]
   232  // 		if v == 0 {
   233  // 			continue
   234  // 		}
   235  // 		absxi := math.Abs(v)
   236  // 		if math.IsNaN(absxi) {
   237  // 			return math.NaN()
   238  // 		}
   239  // 		if scale < absxi {
   240  // 			s := scale / absxi
   241  // 			sumSquares = 1 + sumSquares*s*s
   242  // 			scale = absxi
   243  // 		} else {
   244  // 			s := absxi / scale
   245  // 			sumSquares += s * s
   246  // 		}
   247  // 	}
   248  // 	if math.IsInf(scale, 1) {
   249  // 		return math.Inf(1)
   250  // 	}
   251  // 	return scale * math.Sqrt(sumSquares)
   252  func L2DistanceUnitary(x, y []float64) (norm float64)