Dipterix,
this has nothing to do with R. 2^63 is too large to be represented as singed integer, so the behavior is undefined - to quote from the C99 specs (6.3.1.4): "If the value of the integral part cannot be represented by the integer type, the behavior is undefined." Your subject doesn't match your question as the uint64_t conversion is well-defined and the same on both platforms, but the conversion to int64_t in undefined. Cheers, Simon > On 12/08/2021, at 10:50 AM, Dipterix Wang <dipterix.w...@gmail.com> wrote: > > Hi, > > I was trying to convert REALSXP to int64_t in C, then found that converting > 2^63 is inconsistent across platforms: > > > On M1 ARM osx, 2^63 (double) bit converting to `int64_t` becomes > 9223372036854775807 > On x86_64 ubuntu server, 2^63 (double) bit converting to `int64_t` is > -9223372036854775808 > > I was wondering if this is desired behavior to R? > > Here's the code to replicate the results above. > > print_bit <- Rcpp::cppFunction(r"( > SEXP print_bit(SEXP obj){ > > int64_t tmp1 = *REAL0(obj); > printf("%lld ", tmp1); > > return(R_NilValue); > } > )") > > print_bit(2^63) > > Thanks, > - Dipterix > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel