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