#include #include<windows.h> using namespace std;

#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;

}

C++ 实现截断二进制退避指数算法演示

原文地址: https://www.cveoy.top/t/topic/ojyr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录