在 WebAssembly 如何调用三角函数?

尝试过传递 Web 上本身的 Math.sin,发现性能不如直接调用。有什么在 WebAssembly 上调用三角函数的最佳实践么?使用的是 C++ 和 Emscripten。

阅读 1.6k
1 个回答

用语言提供的基础库啊,比如C++是

#include <math.h>

#include <iostream>
#include <cmath>
#include <time.h>

int main() {
  double result=0;
  clock_t t1 = clock();
  for(long i=0;i<10000000;i++){
    result += cos(i);
    //     std::cout << cos(2) << std::endl;
  }
  std::cout << (clock() - t1) * 1.0 / CLOCKS_PER_SEC * 1000 <<"ms"<< std::endl;

  std::cout <<"result"<< result << std::endl;
}
let result = 0;

function step(input) {
    result += Math.cos(input);
}

console.time('time');
for (let i = 0; i < 10000000; i++) {
    step(i);
}
console.timeEnd('time');
console.log('result', result);

clipboard.png


不开编译优化
clipboard.png
O3优化
clipboard.png


浏览器环境也是能运行的
clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进