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)