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