必要に応じて、最適化されたBLAS (Basic Linear Algebra Subprograms) を使用して、必要なことを行うことができます。これは C 標準にはなく、自分でインストールする必要があるパッケージです。
あなたが望むものを達成するためのサンプルコード:
#include <stdio.h>
#include <stdlib.h>
#include <cblas.h>
int main () {
int limit =10;
float *a = calloc( limit, sizeof(float));
for ( int i = 0; i < limit ; i++){
a[i] = i;
}
cblas_sscal( limit , 0.5f, a, 1);
for ( int i = 0; i < limit ; i++){
printf("%3f, " , a[i]);
}
printf("\n");
}
関数の名前は明らかではありませんが、ガイドラインを読むと、BLAS関数が何をするかを推測し始めるかもしれません。単精度とforにsscal()
分割できます。つまり、この関数は float で機能します。倍精度の同じ関数が呼び出されます。s
scal
scale
dscal()
ベクトルを定数でスケーリングして別のベクトルに追加する必要がある場合、BLAS にはそのための関数もあります。
saxpy()
s a x p y
float a*x + y
y[i] += a*x
ご想像のとおり、daxpy()
で動作する もありますdoubles
。