@@ -51,9 +51,9 @@ The function has the following parameters:
51
51
- ** N** : number of indexed elements.
52
52
- ** alpha** : scalar [ ` Complex128 ` ] [ @stdlib/complex/float64/ctor ] constant.
53
53
- ** x** : first input [ ` Complex128Array ` ] [ @stdlib/array/complex128 ] .
54
- - ** strideX** : index increment for ` x ` .
54
+ - ** strideX** : stride length for ` x ` .
55
55
- ** y** : second input [ ` Complex128Array ` ] [ @stdlib/array/complex128 ] .
56
- - ** strideY** : index increment for ` y ` .
56
+ - ** strideY** : stride length for ` y ` .
57
57
58
58
The ` N ` and stride parameters determine how values from ` x ` are scaled by ` alpha ` and added to ` y ` . For example, to scale every other value in ` x ` by ` alpha ` and add the result to every other value of ` y ` ,
59
59
@@ -137,6 +137,7 @@ zaxpy.ndarray( 3, alpha, x, 1, 1, y, 1, 1 );
137
137
## Notes
138
138
139
139
- If ` N <= 0 ` , both functions return ` y ` unchanged.
140
+ - If ` alpha === 0 ` , both functions return ` y ` unchanged.
140
141
- ` zaxpy() ` corresponds to the [ BLAS] [ blas ] level 1 function [ ` zaxpy ` ] [ zaxpy ] .
141
142
142
143
</section >
@@ -171,6 +172,14 @@ var alpha = new Complex128( 2.0, 2.0 );
171
172
// Scale values from `x` by `alpha` and add the result to `y`:
172
173
zaxpy ( x .length , alpha, x, 1 , y, 1 );
173
174
175
+ // Print the results:
176
+ logEach ( ' (%s)*(%s) + (%s) = %s' , alpha, x, yc, y );
177
+
178
+ yc = zcopy ( y .length , y, 1 , zeros ( y .length , ' complex128' ), 1 );
179
+
180
+ // Scale values from `x` by `alpha` and add the result to `y` using alternative indexing semantics:
181
+ zaxpy .ndarray ( x .length , alpha, x, 1 , 0 , y, 1 , 0 );
182
+
174
183
// Print the results:
175
184
logEach ( ' (%s)*(%s) + (%s) = %s' , alpha, x, yc, y );
176
185
```
@@ -179,6 +188,152 @@ logEach( '(%s)*(%s) + (%s) = %s', alpha, x, yc, y );
179
188
180
189
<!-- /.examples -->
181
190
191
+ <!-- C interface documentation. -->
192
+
193
+ * * *
194
+
195
+ <section class =" c " >
196
+
197
+ ## C APIs
198
+
199
+ <!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->
200
+
201
+ <section class =" intro " >
202
+
203
+ </section >
204
+
205
+ <!-- /.intro -->
206
+
207
+ <!-- C usage documentation. -->
208
+
209
+ <section class =" usage " >
210
+
211
+ ### Usage
212
+
213
+ ``` c
214
+ #include " stdlib/blas/base/zaxpy.h"
215
+ ```
216
+
217
+ #### c_zaxpy( N, alpha, \* X, strideX, \* Y, strideY )
218
+
219
+ Scales values from ` X ` by ` alpha ` and adds the result to ` Y ` .
220
+
221
+ ``` c
222
+ #include " stdlib/complex/float32/ctor.h"
223
+
224
+ float x[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
225
+ float y[ ] = { -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, -8.0 };
226
+ const stdlib_complex128_t alpha = stdlib_complex128( 2.0, 2.0 );
227
+
228
+ c_zaxpy ( 4, alpha, (void * )x, 1, (void * )y, 1 );
229
+ ```
230
+
231
+ The function accepts the following arguments:
232
+
233
+ - **N**: `[in] CBLAS_INT` number of indexed elements.
234
+ - **alpha**: `[in] stdlib_complex128_t` scalar constant.
235
+ - **X**: `[in] void*` input array.
236
+ - **strideX**: `[in] CBLAS_INT` stride length for `X`.
237
+ - **Y**: `[inout] void*` output array.
238
+ - **strideY**: `[in] CBLAS_INT` stride length for `Y`.
239
+
240
+ ```c
241
+ void c_zaxpy( const CBLAS_INT N, const stdlib_complex128_t alpha, const void *x, const CBLAS_INT strideX, void *y, const CBLAS_INT strideY );
242
+ ```
243
+
244
+ #### c_zaxpy_ndarray( N, alpha, \* X, strideX, offsetX, \* Y, strideY, offsetY )
245
+
246
+ Scales values from ` X ` by ` alpha ` and adds the result to ` Y ` using alternative indexing semantics.
247
+
248
+ ``` c
249
+ #include " stdlib/complex/float32/ctor.h"
250
+
251
+ float x[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
252
+ float y[ ] = { -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, -8.0 };
253
+ const stdlib_complex128_t alpha = stdlib_complex128( 2.0, 2.0 );
254
+
255
+ c_zaxpy_ndarray ( 4, alpha, (void * )x, 1, 0, (void * )y, 1, 0 );
256
+ ```
257
+
258
+ The function accepts the following arguments:
259
+
260
+ - **N**: `[in] CBLAS_INT` number of indexed elements.
261
+ - **alpha**: `[in] stdlib_complex128_t` scalar constant.
262
+ - **X**: `[in] void*` input array.
263
+ - **strideX**: `[in] CBLAS_INT` stride length for `X`.
264
+ - **offsetX**: `[in] CBLAS_INT` starting index for `X`.
265
+ - **Y**: `[inout] void*` output array.
266
+ - **strideY**: `[in] CBLAS_INT` stride length for `Y`.
267
+ - **offsetY**: `[in] CBLAS_INT` starting index for `Y`.
268
+
269
+ ```c
270
+ void c_zaxpy_ndarray( const CBLAS_INT N, const stdlib_complex128_t alpha, const void *x, const CBLAS_INT strideX, const CBLAS_INT offsetX, void *y, const CBLAS_INT strideY, const CBLAS_INT offsetY );
271
+ ```
272
+
273
+ </section >
274
+
275
+ <!-- /.usage -->
276
+
277
+ <!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
278
+
279
+ <section class =" notes " >
280
+
281
+ </section >
282
+
283
+ <!-- /.notes -->
284
+
285
+ <!-- C API usage examples. -->
286
+
287
+ <section class =" examples " >
288
+
289
+ ### Examples
290
+
291
+ ``` c
292
+ #include " stdlib/blas/base/zaxpy.h"
293
+ #include " stdlib/complex/float32/ctor.h"
294
+ #include < stdio.h>
295
+
296
+ int main ( void ) {
297
+ // Create strided arrays:
298
+ double x[ ] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 };
299
+ double y[ ] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
300
+
301
+ // Create a complex scalar:
302
+ const stdlib_complex128_t alpha = stdlib_complex128( 2.0, 2.0 );
303
+
304
+ // Specify the number of elements:
305
+ const int N = 4;
306
+
307
+ // Specify stride lengths:
308
+ const int strideX = 1;
309
+ const int strideY = 1;
310
+
311
+ // Scale values from `x` by `alpha` and add the result to `y`:
312
+ c_zaxpy( N, alpha, (void *)x, strideX, (void *)y, strideY );
313
+
314
+ // Print the result:
315
+ for ( int i = 0; i < N; i++ ) {
316
+ printf( "zaxpy[ %i ] = %lf + %lfj\n", i, y[ i * 2 ], y[ ( i * 2 ) + 1 ] );
317
+ }
318
+
319
+ // Scale values from `x` by `alpha` and add the result to `y` using alternative indexing semantics:
320
+ c_zaxpy_ndarray( N, alpha, (void *)x, strideX, 0, (void *)y, strideY, 0 );
321
+
322
+ // Print the result:
323
+ for ( int i = 0; i < N; i++ ) {
324
+ printf( "zaxpy[ %i ] = %lf + %lfj\n", i, y[ i * 2 ], y[ ( i * 2 ) + 1 ] );
325
+ }
326
+ }
327
+ ```
328
+
329
+ </section>
330
+
331
+ <!-- /.examples -->
332
+
333
+ </section>
334
+
335
+ <!-- /.c -->
336
+
182
337
<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->
183
338
184
339
<section class="related">
@@ -193,7 +348,7 @@ logEach( '(%s)*(%s) + (%s) = %s', alpha, x, yc, y );
193
348
194
349
[blas]: http://www.netlib.org/blas
195
350
196
- [ zaxpy ] : https://www.netlib.org/lapack/explore-html/d5/d4b/group__axpy_ga0b7bac1f4d42514074a48f14f5f9caa0 .html#ga0b7bac1f4d42514074a48f14f5f9caa0
351
+ [zaxpy]: https://www.netlib.org/lapack/explore-html/d5/d4b/group__axpy_gaf603daa00d5c723d0e409d9b2d011bf4 .html
197
352
198
353
[mdn-typed-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
199
354
0 commit comments