仅具有正数的计算将返回负数。
下面是源代码。
library(Rcpp)
sourceCpp(code = "
#include <Rcpp.h>
//[[Rcpp::export]]
double test4(int n, int m, int i) {
double out = (double)(n * i) / (double)(m + 1);
return out;
}
")
test4(10000,1000000, as.integer(3*10^5))
使用大值作为参数时会发生这种现象。
我想要正确的返回值。
我应该怎么办?
谢谢。
答案 0 :(得分:0)
问题是您要使用整数来乘积n * i
。如果它们很大,则会得到整数溢出,因为32位带符号的int表示的最大数字为2147483647。对于带符号的整数,溢出将导致负数。一个简单的解决方法是在乘法之前进行强制转换:
library(Rcpp)
sourceCpp(code = "
#include <Rcpp.h>
//[[Rcpp::export]]
double test4(int n, int m, int i) {
double out = (double)n * i / (double)(m + 1);
return out;
}
")
test4(10000,1000000, as.integer(3*10^5))
结果:
2999.997
顺便说一句,我不是在这里更改C样式的强制转换,但是通常C ++样式的强制转换是首选的恕我直言。