C++ 实现截断二进制退避指数算法演示
#include
#define CONTENTION_PERIOD 51.20 // 争用期时间
int GetRand(int a, int b) // 得到a到b之间的一个随机数 { SYSTEMTIME t; GetSystemTime(&t); int r; r = (t.wMilliseconds + t.wSecond) % (a - b + 1) + a; return r; }
int TwoPowerK(int k) // 二的k次幂 { int a = 2; int f = 1; while(k--) { f *= a; } return f; }
int main() { cout << "*** * * * * * * " << endl; cout << "截断二进制退避指数算法演示" << endl; cout << " * * * * * * ***" << endl;
int k, r, nk;
float BackTime;
cout << "请输入重传次数(范围[1,16]):";
cin >> k;
while(k > 16)
{
cout << "您输入的次数不合法!" << endl;
cout << "请输入重传次数(范围[1,16]):";
cin >> k;
}
if(k == 16)
{
cout << "重传次数过多,向高层报告,演示结束!" << endl;
exit(1);
}
if(k > 10)
{
k = 10;
cout << "重传次数超过10,从10截止!" << endl;
}
nk = TwoPowerK(k);
cout << "随机数范围: " << "0 到 " << nk - 1 << endl;
r = GetRand(0, nk - 1);
cout << "得到的随机数r为:" << r << endl;
BackTime = r * CONTENTION_PERIOD;
cout << "退避时间为: " << "51.2 * " << r << " = " << BackTime << " 微秒" << endl;
system("pause");
return 0;
}
原文地址: https://www.cveoy.top/t/topic/ojyr 著作权归作者所有。请勿转载和采集!