0

在 RStudio 中获取以下 cpp 文件,当我希望获得双精度时,您会看到 Rcpp::abs 返回一个整数。std::abs 解决了这个问题。我认为我的期望是错误的,但这是为什么呢?为什么它应该在这里返回一个整数(当然,它是一个双精度值,但只能取整数值)?

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::plugins("cpp11")]]

// [[Rcpp::export]]
NumericVector closestIndices(NumericVector x) {
  int fst = 0;
  int snd = 1;
  int n = x.size();
  double diff = abs(x[snd] - x[fst]);
  Rprintf("diff: %f\n", diff);
  double candDiff;
  
  for(int i = 0; i < n - 1; i++){
    for(int j = i + 1; j < n; j++){
      candDiff = abs(x[j] - x[i]);
      // Rprintf("i: %i\tj: %i\tdiff: %.4f\n", i, j,candDiff);
      if( candDiff < diff){
        fst = i;
        snd = j;
        diff = candDiff;
      }
    }
  }
  
  NumericVector output = {double(fst),double(snd)};
  return output;
}

/*** R
x <- c(0.98799517, 1.09055728, 1.20383713, 1.32927166, 1.46857509, 
       1.62380423, 1.79743107, 1.99241551, 2.21226576, 2.46106916, 2.74346924, 
       3.06455219, 3.42958354, 3.84350238, 4.31005838, 4.83051356, 5.40199462, 
       6.01590035, 6.65715769, 7.30532785, 7.93823621, 8.53773241, 9.09570538, 
       9.61755743, 10.12099196, 10.6301818, 11.16783243, 11.74870531, 
       12.37719092, 13.04922392, 13.75661322, 14.49087793, 15.24414627, 
       16.00601247, 16.75709565, 17.46236358, 18.06882072, 18.51050094, 
       18.71908344, 18.63563523, 18.22123225, 17.46709279, 16.40246292, 
       15.09417699, 13.63404124, 12.11854915, 10.6305417, 9.22947285, 
       7.95056, 6.80923943, 5.80717982, 4.93764782, 4.1894745, 3.54966795, 
       3.00499094, 2.54283599, 2.1516578, 1.82114213, 1.54222565, 1.30703661, 
       1.10879707, 0.94170986, 0.80084308, 0.68201911, 0.58171175, 0.49695298, 
       0.42525021, 0.3645135, 0.31299262, 0.26922281, 0.2319786, 0.20023468, 
       0.17313291, 0.14995459, 0.1300973, 0.11305559, 0.09840485, 0.08578789, 
       0.07490387, 0.06549894, 0.05735864)
closestIndices(x)
*/

4

0 回答 0