1

ドキュメントを調べました:

を使用して、float の v8 配列を設定しようとしていますthrust::host_vectofr<float>dataset[i].vector = thrust::host_vector<float>

配列を使用すると、整数に丸められているようです:

Local<Object> obj = Object::New(isolate);
Local<Array> vec = Array::New(isolate, dataset[i].vector.size());

// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
    vec->Set(k, Number::New(isolate, dataset[i].vector[k]));

obj->Set(String::NewFromUtf8(isolate, "vector"), vec);

型付き配列を使用すると、次のようになりFloat32Arrayます。

Local<Object> obj = Object::New(isolate);
auto vec = Float32Array::New(ArrayBuffer::New(isolate, sizeof(float)), 0, dataset[i].vector.size());

// populate the v8 array (copy)
for (unsigned int k = 0; k < dataset[i].vector.size(); k++)
    vec->Set(k, Number::New(isolate, dataset[i].vector[k]));

obj->Set(String::NewFromUtf8(isolate, "vector"), vec);

コンパイルは問題なく実行できますが、実行するとクラッシュします:

*** Error in `node': corrupted double-linked list: 0x000000000734bf50 ***
fish: “node run.js” terminated by signal SIGABRT (Abort)

JavaScriptで使用できるように、C++からv8 Float32Arrayを割り当ててから入力する正しいアプローチは何ですか?

floatまた、Node.JS/v8 には?が付いていないことも理解しています。

4

1 に答える 1

1

V8 のバージョンはわかりません (コンテキストなしで Set を呼び出すことは、API ドキュメントにはありません) が、4.10 では問題なく動作します。

auto arr = v8::Array::New(isolate);
(void)arr->Set(context, 0, v8::Number::New(isolate, 2.5));
auto number = arr->Get(context, 0);
printf("%s\n", *v8::String::Utf8Value(number.ToLocalChecked()));

プリントアウト

2.5

浮動小数点値への変換も機能します。

printf("%f\n", ((v8::Number*)*number.ToLocalChecked())->Value());
于 2016-02-03T20:19:24.047 に答える