使用rcpp::cpp函数编译多个嵌套循环
R-用户 我试图用蛮力来解决一个组合问题,以评估近似计算的质量。为此,我编写了一个小的R函数,对于变量R,它输出一个非常丑陋的rcpp函数,其中包含R个嵌套循环和一些中断条件。然而,当r开始在20+的范围内时,使用rcpp::cppFunction编译函数需要非常长的时间 有没有解释为什么rcpp编译会因为大量嵌套循环而出现故障?当我用C++编译函数作为普通C++程序时,它就在不到一秒钟的时间内编译直线,并且运行完美无缺(使用CUT而不是RcOUT)。 我可能遗漏了一些明显的东西,因为当我删除除最里面的break条件之外的所有条件时,它就可以用rcpp漂亮地编译了。然而,当我删除这个最后的中断条件时,它不会再次完成编译。。。 有什么建议吗 这里有一个r=20的示例程序,我还在等待编译完成。警告:它很难看,但会自动生成使用rcpp::cpp函数编译多个嵌套循环,r,rcpp,R,Rcpp,R-用户 我试图用蛮力来解决一个组合问题,以评估近似计算的质量。为此,我编写了一个小的R函数,对于变量R,它输出一个非常丑陋的rcpp函数,其中包含R个嵌套循环和一些中断条件。然而,当r开始在20+的范围内时,使用rcpp::cppFunction编译函数需要非常长的时间 有没有解释为什么rcpp编译会因为大量嵌套循环而出现故障?当我用C++编译函数作为普通C++程序时,它就在不到一秒钟的时间内编译直线,并且运行完美无缺(使用CUT而不是RcOUT)。 我可能遗漏了一些明显的东西,因为当我删除除
cppFunction('
int make_tList_rcpp() {
int r = 20;
std::cout << std::endl;
for (int t20=0; t20 <= floor(r/20); t20++) {
for (int t19=0; t19 <= floor(r/19); t19++) {
for (int t18=0; t18 <= floor(r/18); t18++) {
for (int t17=0; t17 <= floor(r/17); t17++) {
for (int t16=0; t16 <= floor(r/16); t16++) {
for (int t15=0; t15 <= floor(r/15); t15++) {
for (int t14=0; t14 <= floor(r/14); t14++) {
for (int t13=0; t13 <= floor(r/13); t13++) {
for (int t12=0; t12 <= floor(r/12); t12++) {
for (int t11=0; t11 <= floor(r/11); t11++) {
for (int t10=0; t10 <= floor(r/10); t10++) {
for (int t9=0; t9 <= floor(r/9); t9++) {
for (int t8=0; t8 <= floor(r/8); t8++) {
for (int t7=0; t7 <= floor(r/7); t7++) {
for (int t6=0; t6 <= floor(r/6); t6++) {
for (int t5=0; t5 <= floor(r/5); t5++) {
for (int t4=0; t4 <= floor(r/4); t4++) {
for (int t3=0; t3 <= floor(r/3); t3++) {
for (int t2=0; t2 <= floor(r/2); t2++) {
for (int t1=0; t1 <= floor(r/1); t1++) {
if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18) > r) {
break;
}
}
if ((20*t20+19*t19) > r) {
break;
}
}
if ((20*t20) > r) {
break;
}
}
return(0);
}')
除了macOS,它可以在任何平台上编译和运行 编辑之后,我们有一些有用的调试信息。特别是,正在使用的标志:
clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I"/Users/hoehle/Library/R/3.3/library/Rcpp/include" -I"/Users/hoehle/Sandbox/Blog/_source" -fPIC -Wall -mtune=core2 -g -O2 -c foobar.cpp -o foobar.o
macOS上嵌套for
循环编译出现问题的原因与clang
如何优化-O2
vs-Os
下的嵌套循环有关。具体而言,存在一个回归循环clang
v3.0,它直接影响优化所述循环的能力。具体见:
此问题似乎已在3.8版本内修复。缺点是您必须手动更新此编译器,因为此回归在所有macOS机器上都附带clang
版本。您可能只想在macOS上切换到gcc
。无论如何,下面的文章应该有助于通过自制和~/.R/Makevars
您可能希望使用sourceCpp()
而不是cppFunction()
,因为后者用于更简单的函数。sourceCpp()
函数用于更复杂的情况。此外,我可能会选择避免指定int
返回类型
sourceCpp()的使用示例
文件:示例_comb.cpp
#include <Rcpp.h>
// [[Rcpp::export]]
void make_tList_rcpp() {
int r = 20;
std::cout << std::endl;
for (int t20=0; t20 <= floor(r/20); t20++) {
for (int t19=0; t19 <= floor(r/19); t19++) {
for (int t18=0; t18 <= floor(r/18); t18++) {
for (int t17=0; t17 <= floor(r/17); t17++) {
for (int t16=0; t16 <= floor(r/16); t16++) {
for (int t15=0; t15 <= floor(r/15); t15++) {
for (int t14=0; t14 <= floor(r/14); t14++) {
for (int t13=0; t13 <= floor(r/13); t13++) {
for (int t12=0; t12 <= floor(r/12); t12++) {
for (int t11=0; t11 <= floor(r/11); t11++) {
for (int t10=0; t10 <= floor(r/10); t10++) {
for (int t9=0; t9 <= floor(r/9); t9++) {
for (int t8=0; t8 <= floor(r/8); t8++) {
for (int t7=0; t7 <= floor(r/7); t7++) {
for (int t6=0; t6 <= floor(r/6); t6++) {
for (int t5=0; t5 <= floor(r/5); t5++) {
for (int t4=0; t4 <= floor(r/4); t4++) {
for (int t3=0; t3 <= floor(r/3); t3++) {
for (int t2=0; t2 <= floor(r/2); t2++) {
for (int t1=0; t1 <= floor(r/1); t1++) {
if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
Rcpp::Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18) > r) {
break;
}
}
if ((20*t20+19*t19) > r) {
break;
}
}
if ((20*t20) > r) {
break;
}
}
}
/*** R
# Runs automatically in R after compile
make_tList_rcpp(42)
*/
#包括
//[[Rcpp::导出]]
作废make_tList_rcpp(){
int r=20;
std::cout这可以编译并运行在除macOS之外的所有平台上
编辑后,我们有一些有用的调试信息。特别是使用的标志:
clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I"/Users/hoehle/Library/R/3.3/library/Rcpp/include" -I"/Users/hoehle/Sandbox/Blog/_source" -fPIC -Wall -mtune=core2 -g -O2 -c foobar.cpp -o foobar.o
macOS上嵌套for
循环编译出现问题的原因与clang
如何优化-O2
vs-Os
下的嵌套循环有关。具体而言,存在一个回归循环clang
v3.0,它直接影响优化所述循环的能力。具体请参阅:
此问题似乎已在3.8版本中修复。缺点是,由于此回归在所有macOS计算机上都附带了clang
版本,因此您必须手动更新此编译器。您可能只想在macOS上切换到gcc
。无论如何,下面的帖子应该有助于设置适当的编译器通过自制和~/.R/Makevars
您可能希望使用sourceCpp()
而不是cppFunction()
,因为后者用于更简单的函数。sourceCpp()
函数用于更复杂的情况。此外,我可能会选择避免指定int
返回类型
sourceCpp()的使用示例
文件:示例_comb.cpp
#include <Rcpp.h>
// [[Rcpp::export]]
void make_tList_rcpp() {
int r = 20;
std::cout << std::endl;
for (int t20=0; t20 <= floor(r/20); t20++) {
for (int t19=0; t19 <= floor(r/19); t19++) {
for (int t18=0; t18 <= floor(r/18); t18++) {
for (int t17=0; t17 <= floor(r/17); t17++) {
for (int t16=0; t16 <= floor(r/16); t16++) {
for (int t15=0; t15 <= floor(r/15); t15++) {
for (int t14=0; t14 <= floor(r/14); t14++) {
for (int t13=0; t13 <= floor(r/13); t13++) {
for (int t12=0; t12 <= floor(r/12); t12++) {
for (int t11=0; t11 <= floor(r/11); t11++) {
for (int t10=0; t10 <= floor(r/10); t10++) {
for (int t9=0; t9 <= floor(r/9); t9++) {
for (int t8=0; t8 <= floor(r/8); t8++) {
for (int t7=0; t7 <= floor(r/7); t7++) {
for (int t6=0; t6 <= floor(r/6); t6++) {
for (int t5=0; t5 <= floor(r/5); t5++) {
for (int t4=0; t4 <= floor(r/4); t4++) {
for (int t3=0; t3 <= floor(r/3); t3++) {
for (int t2=0; t2 <= floor(r/2); t2++) {
for (int t1=0; t1 <= floor(r/1); t1++) {
if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
Rcpp::Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18) > r) {
break;
}
}
if ((20*t20+19*t19) > r) {
break;
}
}
if ((20*t20) > r) {
break;
}
}
}
/*** R
# Runs automatically in R after compile
make_tList_rcpp(42)
*/
#包括
//[[Rcpp::导出]]
作废make_tList_rcpp(){
int r=20;
std::不可能是最好的嵌套循环,我自己无法复制它。上面的cppfunction
代码在我的笔记本电脑上以~1s的时间编译。在Linux上的Rcpp 0.12.8,R 3.3.1-粘贴verbose=TRUE,rebuild=TRUE
是否会告诉我们更多关于进程的哪个部分被粘贴的信息?循环会找到解决问题所需的所有集合我想在上面的文章中更新一些调试信息。在Linux上也尝试过,这里它工作,所以它似乎是我的MAC配置的问题……可能是太旧/新的C++编译器……可能是最好的嵌套循环,它自己不能复制。你的代码> CPPPytys/CODE >代码Above在我的笔记本电脑上以~1s的速度编译。Linux上的Rcpp 0.12.8,R 3.3.1-粘贴verbose=TRUE,rebuild=TRUE
是否能告诉我们更多关于该过程中哪个部分被粘贴的信息?循环找到了解决生日问题所需的所有集合,概率不相等-请参阅@Spacedman我已经用一些调试更新了上面的帖子NFO。它也在Linux上试用过,它在这里工作,所以它似乎是我的MAC配置的问题……可能是太老/新的C++编译器……我不得不将RcOUT替换为RCPP::RcOUT,以便开始编译。但是,这仍然挂在我的计算机(MAC)的编译中。。然而,当我在Linux上尝试它时,它似乎起了作用……奇怪……似乎这是clang
的问题。上面在Rtools工具包下编译的很好,@Spacedman在Linux下成功编译了它。给我一些时间想一想。尝试了回答中提到的博客文章中的建议:修改Makevars以使用通过自制程序安装的gcc-4.9运行正常(有很多警告,但可以编译!)@mhatsu很高兴听到它起作用。请随意接受答案。此外,您可能希望安装最新的gcc
,它将为您提供gcc-6
。我必须将Rcout替换为Rcpp::Rcout才能开始编译。但是,这仍然挂在我的计算机(Mac)上的编译中。然而,当我尝试使用它时
#include <Rcpp.h>
// [[Rcpp::export]]
void make_tList_rcpp() {
int r = 20;
std::cout << std::endl;
for (int t20=0; t20 <= floor(r/20); t20++) {
for (int t19=0; t19 <= floor(r/19); t19++) {
for (int t18=0; t18 <= floor(r/18); t18++) {
for (int t17=0; t17 <= floor(r/17); t17++) {
for (int t16=0; t16 <= floor(r/16); t16++) {
for (int t15=0; t15 <= floor(r/15); t15++) {
for (int t14=0; t14 <= floor(r/14); t14++) {
for (int t13=0; t13 <= floor(r/13); t13++) {
for (int t12=0; t12 <= floor(r/12); t12++) {
for (int t11=0; t11 <= floor(r/11); t11++) {
for (int t10=0; t10 <= floor(r/10); t10++) {
for (int t9=0; t9 <= floor(r/9); t9++) {
for (int t8=0; t8 <= floor(r/8); t8++) {
for (int t7=0; t7 <= floor(r/7); t7++) {
for (int t6=0; t6 <= floor(r/6); t6++) {
for (int t5=0; t5 <= floor(r/5); t5++) {
for (int t4=0; t4 <= floor(r/4); t4++) {
for (int t3=0; t3 <= floor(r/3); t3++) {
for (int t2=0; t2 <= floor(r/2); t2++) {
for (int t1=0; t1 <= floor(r/1); t1++) {
if ((1*t1+2*t2+3*t3+4*t4+5*t5+6*t6+7*t7+8*t8+9*t9+10*t10+11*t11+12*t12+13*t13+14*t14+15*t15+16*t16+17*t17+18*t18+19*t19+20*t20) == r) {
Rcpp::Rcout << t1 << "," << t2 << "," << t3 << "," << t4 << "," << t5 << "," << t6 << "," << t7 << "," << t8 << "," << t9 << "," << t10 << "," << t11 << "," << t12 << "," << t13 << "," << t14 << "," << t15 << "," << t16 << "," << t17 << "," << t18 << "," << t19 << "," << t20 << std::endl;
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2+1*t1) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3+2*t2) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4+3*t3) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5+4*t4) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6+5*t5) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7+6*t6) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8+7*t7) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9+8*t8) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10+9*t9) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11+10*t10) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12+11*t11) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13+12*t12) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14+13*t13) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15+14*t14) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16+15*t15) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17+16*t16) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18+17*t17) > r) {
break;
}
}
if ((20*t20+19*t19+18*t18) > r) {
break;
}
}
if ((20*t20+19*t19) > r) {
break;
}
}
if ((20*t20) > r) {
break;
}
}
}
/*** R
# Runs automatically in R after compile
make_tList_rcpp(42)
*/