00001 #define MAXRATE 25000000.0
00002 #define SAMLLFLOAT 0.0000001
00003
00004
00005
00006
00007
00008 static double p_to_b(double p, double rtt, double tzero, int psize, int bval)
00009 {
00010 double tmp1, tmp2, res;
00011
00012 if (p < 0 || rtt < 0) {
00013 return MAXRATE ;
00014 }
00015 res=rtt*sqrt(2*bval*p/3);
00016 tmp1=3*sqrt(3*bval*p/8);
00017 if (tmp1>1.0) tmp1=1.0;
00018 tmp2=tzero*p*(1+32*p*p);
00019 res+=tmp1*tmp2;
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 if (res < SAMLLFLOAT) {
00042 res=MAXRATE;
00043 } else {
00044
00045 res=psize/res;
00046 }
00047 if (res > MAXRATE) {
00048 res = MAXRATE ;
00049 }
00050 return res;
00051 }