gpt4 book ai didi

c - Opencl 数学 opencl 的新手尝试将 Octave 转换为 opencl 或 c 得到不同的结果

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:58 27 4
gpt4 key购买 nike

我只需要一点帮助将这些 Octave 音阶行转换为 opencl 我想我对翻译感到困惑 ^ to pow her is octave/opencl code 但结果不一样

v1=0.3; 
E1=(207*(10^9));
E2=(3*(10^6));
v2=0.49;

Octave

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)));//兆帕 DEF=6*n*U*pow(B,2)/Er/pow(sigma,3);

Octave 结果//er 1.2402e+07//防御力 30.962

opencl 结果呃 139.336666DEF -0.000003

不确定我做错了什么,但如果有人看到它请帮忙谢谢

最佳答案

OpenCL 源自 C99,因此您可以使用普通的 C 程序检查转换是否正确。

如果我采用您的 C 版本的 Ers 计算并使用 C 运行它,我得到的结果与您的 Octave 结果匹配。我怀疑您的问题出在 E1E2 常量值的定义上。如果我将它们原封不动地粘贴到 C 程序中,我会得到与您的 OpenCL 结果非常相似的答案。问题在于,尽管 10^9 在 C 中在语法上有效,但它与 Octave 中的含义不同(^ 是 C 中的按位异或运算符)。相反,您应该使用科学的 E 表示法,例如 1e9

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

#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;
}

关于c - Opencl 数学 opencl 的新手尝试将 Octave 转换为 opencl 或 c 得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21363729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com