【发布时间】:2017-05-02 18:58:35
【问题描述】:
我使用了 R 包“Rcpp”提供的示例,并获得了负的 50-th Fibonacci 项:
fib <- Rcpp::cppFunction(
'int fibonacci(const int x) {
if (x == 0) return(0);
if (x == 1) return(1);
return (fibonacci(x - 1)) + fibonacci(x - 2);
}')
fib(50)
# [1] -298632863
这让我好奇地检查了直到 F(50) 的整个序列:
sapply(seq(50), fib)
事实证明,否定项以 F(47) 开头:
[1] 1 1 2 3 5 8 13 21 34
.
.
[10] 55 89 144 . . .
.
.
[46] 1836311903 -1323752223 512559680 -811192543 -298632863
欢迎任何见解!
sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 14393)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.4.0 tools_3.4.0 inline_0.3.14 Rcpp_0.12.10
【问题讨论】:
-
看起来您正在返回
int。您可能想检查有符号整数值可以采用的值范围。 -
我改为“long”,结果相似:-298632863
-
你能换成
long long吗?见here。 -
尝试“long long”以错误告终。我改为“float”,结果是 F(50) = 12586267648,没有其他项到 F(50) 是负数
-
@DragosBandur 那时你已经失去了精确度。第 50 个数字是序列实际上是 12,586,269,025。 R 本身不支持无符号 4 字节整数。
.Machine$integer.max已经够高了