formula.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:1k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #define MAXRATE 25000000.0 
  2. #define SAMLLFLOAT 0.0000001
  3. /*
  4.  * This takes as input the packet drop rate, and outputs the sending 
  5.  *   rate in bytes per second.
  6.  */
  7. static double p_to_b(double p, double rtt, double tzero, int psize, int bval) 
  8. {
  9. double tmp1, tmp2, res;
  10. if (p < 0 || rtt < 0) {
  11. return MAXRATE ; 
  12. }
  13. res=rtt*sqrt(2*bval*p/3);
  14. tmp1=3*sqrt(3*bval*p/8);
  15. if (tmp1>1.0) tmp1=1.0;
  16. tmp2=tzero*p*(1+32*p*p);
  17. res+=tmp1*tmp2;
  18. // if (formula_ == 1 && p > 0.25) { 
  19. // // Get closer to RFC 3714, Table 1.
  20. // // This is for TCP-friendliness with a TCP flow without ECN
  21. // //   and without timestamps.
  22. // // Just for experimental purposes. 
  23. // if p > 0.70) {
  24. // res=res*18.0;
  25. // } else if p > 0.60) {
  26. // res=res*7.0;
  27. // } else if p > 0.50) {
  28. // res=res*5.0;
  29. // } else if p > 0.45) {
  30. // res=res*4.0;
  31. // } else if p > 0.40) {
  32. // res=res*3.0;
  33. // } else if p > 0.25) {
  34. // res=res*2.0;
  35. // }
  36. // }
  37. // At this point, 1/res gives the sending rate in pps:
  38. // 1/(rtt*sqrt(2*bval*p/3) + 3*sqrt(3*bval*p/8)*tzero*p*(1+32*p*p))
  39. if (res < SAMLLFLOAT) {
  40. res=MAXRATE;
  41. } else {
  42. // change from 1/pps to Bps.
  43. res=psize/res;
  44. }
  45. if (res > MAXRATE) {
  46. res = MAXRATE ; 
  47. }
  48. return res;
  49. }