gpt4 book ai didi

c++ - 两个看似相似的函数给出了不同的结果。为什么?

转载 作者:太空狗 更新时间:2023-10-29 21:38:36 26 4
gpt4 key购买 nike

我正在使用 Rcpp 将一段 C++ 代码集成到 R 中。我用两种方式在 C++ 中实现一个函数:

// [[Rcpp::export]]
double rhobiweight(double x,double k = 2.0){
double rho = 1.0;
if(abs(x)<k){
rho = 1.0-pow((1.0-pow(x/k,2)),3);
}
return rho/Erho(k) ;
}

// [[Rcpp::export]]
double rhobiweight2(double x,double k = 2.0){
double rho = 1.0-pow((1.0-pow(x/k,2)),3);
if(abs(x)>k){
rho = 1.0;
}
return rho/Erho(k) ;
}

如果 x 值介于 2 和 3 之间,我会得到这些函数的不同结果。我不明白为什么。

> set.seed(1)
> x = 3*rnorm(10^5)
> c = x
> c2 = x
> for(i in 1:length(x)){
+ c[i] = rhobiweight(x[i])
+ c2[i] = rhobiweight2(x[i])
+ }
> print(sum(c-c2))
[1] -18564.31

最佳答案

问题出在你的if函数内部的语句。 <的负片是>= .所以你应该替换 <<=在一个函数中或 >>=另一方面,取决于预期的行为。

您的问题发生在 2.0 到 2.9 之间的值,因为 abs(int)将始终返回 2对于这个范围。

abs(x)需要 int返回 int .你的double x隐式转换为 int在你的情况下。

关于c++ - 两个看似相似的函数给出了不同的结果。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812194/

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