首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opencl数学新到opencl尝试将八度转换为opencl或c,得到不同的结果

Opencl数学新到opencl尝试将八度转换为opencl或c,得到不同的结果
EN

Stack Overflow用户
提问于 2014-01-26 13:06:24
回答 1查看 530关注 0票数 0

我只需要一点帮助,把这行八度转换成opencl,我想我对翻译^ to pow is octave/opencl代码感到困惑,但结果并不相同。

代码语言:javascript
复制
v1=0.3; 
E1=(207*(10^9)); 
E2=(3*(10^6)); 
v2=0.49;

倍频程

代码语言:javascript
复制
Ers=1/(1/pi*((1-v1^2)/E1+(1-v2^2)/E2));%MPa  Whats this look like in c
DEF=(6*n*U*B^2)/Er/(sigma^3);

我的opencl尝试翻译

Ers=(1.00/(1.00/pi*)((1.00-pow(v1 ,2))/E1+(1.00-pow(v2,2)/E2)),//MPa DEF=6*n*U*pow(B,2)/Er/pow(σ,3);

倍频程结果//ers 1.2402e+07 //DEF 30.962

opencl结果Ers 139.336666 DEF -0.000003

不知道我做错了什么,但如果有人看到了,请帮忙谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-26 13:30:55

OpenCL是从C99派生而来的,所以您可以用一个普通的普通C程序来检查您的转换是否正确。

如果我取你的C版本的Ers计算并用C运行它,我得到的结果与你的八度结果相匹配。我怀疑您的问题在于E1E2常量值的定义。如果我将这些内容粘贴到C程序中,没有改变,我得到的答案非常类似于您的OpenCL结果。问题是,尽管10^9在C中语法上是有效的,但它并不意味着与在Octave中相同(^是C中的位XOR运算符)。相反,您应该使用科学的E符号,例如1e9

因此,这里有一个完整的C程序,它使用几乎逐字复制的C代码计算Ers值,只修正常量值。这将在我的系统上产生输出Ers = 1.24024e+07

代码语言:javascript
复制
#include <math.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
  double v1 = 0.3;
  double E1 = (207*(1e9));
  double E2 = (3*(1e6));
  double v2 = 0.49;
  double pi = M_PI;
  double Ers = (1.00/(1.00/pi*((1.00-pow(v1,2))/E1+(1.00-pow(v2, 2))/E2)));
  printf("Ers = %g\n", Ers);
  return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21363729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档