• java调用Excel中的GAMMADIST函数返回伽玛分布


    java调用Excel中的GAMMADIST函数返回伽玛分布
    一、问题描述:想用java调用Excel中的GAMMADIST 函数。
    Microsoft office Excel中用法说明如下:https://support.microsoft.com/zh-cn/office/gammadist-%E5%87%BD%E6%95%B0-7327c94d-0f05-4511-83df-1dd7ed23e19e?ui=zh-cn&rs=zh-cn&ad=cn
    WPS Excel中用法说明如下:https://www.wps.cn/learning/room/d/328021

    二、尝试网上找的vb版GammaDist()和GammaInv()两函数的代码转java
    1、从matlab里翻译过来的vb版GammaDist()和GammaInv()两函数的代码如下:

    1. vb版GammaDist()和GammaInv()两函数的代码
    2. http://wenku.baidu.com/link?url=uHtUUETc8q1HAlSV7ChTHRg0SLrBKApRKC-BLFnHHoviqv3G4r4DY8ONIWi_5fKN6DuBURHhAkOfJvGNJg7mFyjjERKRoeWASkFTmK3yvXa从matlab里翻译过来的
    3.  
    4. GammaDist(x,a,b,true):  
    5. '%GAMCDF Gamma cumulative distribution function. 
    6. '%   P = GAMCDF(X,A,B) returns the gamma cumulative distribution 
    7. '%   function with parameters A and B at the values in X. 
    8.  
    9. Public Function GamCdf(x, a, b)  
    10.   
    11. '对应excel中GammaDist(x,a,b,true)函数,
    12. 计算S曲线 
    13.   
    14. If a <= 0 Or b <= 0 Then GammCdf = "NaN"   
    15. GamCdf = GAMMAINC(x / b, a)   
    16. = IIf(p > 11, p) 
    17. End Function 
    18.  
    19. '%GAMMAINC Incomplete gamma function. 
    20. '%   Y = GAMMAINC(X,A) evaluates the incomplete gamma function for 
    21. '%   corresponding elements of X and A.  X and A must be real and the same 
    22. '%   size (or either can be a scalar).  A must also be non-negative. 
    23. '%   The incomplete gamma function is defined as: 
    24. '%gammainc(x,a) = 1 ./ gamma(a) .* 
    25. '%  integral from 0 to x of t^(a-1) exp(-t) dt 
    26. ''%   For any a>=0, as x approaches infinity, gammainc(x,a) approaches 1. 
    27. '%   For small x and a, gammainc(x,a) ~= x^a, so gammainc(0,0= 1
    28. Public Function GAMMAINC(x, a) 
    29. Dim amax As Double  
    30.   amax = 2 ^ 20 
    31.  ascalar = 1 
    32.    
    33. If a <= amax Then 
    34.         If a <> 0 And x <> 0 And x < a + 1 Then 
    35.  xk = x 
    36.  ak = a 
    37.  ap = ak 
    38.  Sum = 1 / ap 
    39.  del = Sum 
    40.    Dim i As Double 
    41.   
    42.  For i = 1 To 10000 
    43.   ap = ap + 1 
    44.   del = xk * del / ap 
    45.   Sum = Sum + del 
    46.    Next 
    47. GAMMAINC = Sum * Exp(-xk + ak * Log(xk) - GAMMALN(ak)) 
    48.      ElseIf a <> 0 And x <> 0 And x >= a + 1 Then 
    49.  
    50.  xk = x   
    51.  a0 = 1   
    52.  a1 = x   
    53.  b0 = 0   
    54.  b1 = a0   
    55.  ak = a   
    56.  fac = 1   
    57.  n = 1   
    58.  g = b1   
    59.  gold = b0  
    60.  For i = 1 To 10000   
    61. gold = g   
    62. ana = n - ak   
    63. a0 = (a1 + a0 * ana) * fac      
    64. b0 = (b1 + b0 * ana) * fac 
    65.   anf = n * fac   
    66. a1 = xk * a0 + anf * a1 
    67. b1 = xk * b0 + anf * b1 
    68. fac = 1 / a1 
    69. = b1 * fac 
    70. = n + 1 
    71.  Next 
    72.  GAMMAINC = 1 - Exp(-xk + ak * Log(xk) - GAMMALN(ak)) * g  
    73.    End If 
    74. Else 
    75. End If  
    76. End Function 
    77.  
    78. '*****************************************************************************************************
    79. ************** 
    80. '%GAMMALN Logarithm of gamma function
    81. '%  
    82.  Y = GAMMALN(X) computes the natural logarithm of the gamma 
    83. '%   function for each element of X.  GAMMALN is defined as 
    84. '% '%  LOG(GAMMA(X)) 
    85. '% '%   and is obtained without computing GAMMA(X).  Since the gamma 
    86. '%   function can range over very large or very small values, its 
    87. '%   logarithm is sometimes more useful.  http://zanjero.ygblog.com/
    88.  
    89. Public Function GAMMALN(XX) 
    90. Dim COF(6As Double, stp As Double, half As Double, one As Double 
    91. Dim fpf As Double, x As Double, tmp As Double, ser As Double 
    92. Dim j As Integer 
    93. COF(1= 76.18009173 
    94. COF(2= -86.50532033 
    95. COF(3= 24.01409822 
    96. COF(4= -1.231739516 
    97. COF(5= 0.00120858003 
    98. COF(6= -0.00000536382 
    99. stp = 2.50662827465 
    100. half = 0.5 
    101. one = 1
    102. fpf = 5.5 
    103. = XX - one 
    104. tmp = x + fpf 
    105. tmp = (x + half) * Log(tmp) - tmp 
    106. ser = one 
    107. For j = 1 To 6 
    108.    x = x + one 
    109.    ser = ser + COF(j) / x 
    110. Next j   
    111. GAMMALN = tmp + Log(stp * ser) 
    112. End Function 
    113.  
    114. GammaInv:(要调用上面的GamCdf和GAMMALN函数) 
    115. '%GAMINV Inverse of the gamma cumulative distribution function (cdf). 
    116. '%   X = GAMINV(P,A,B)  returns the inverse of the gamma cdf with 
    117. '%   parameters A and B, at the probabilities in P对应Excel中GammaInv(p,a,b)函数,计算PⅢ的Φp值Φp=Cs/2*GammaInv(1-p/100,4/Cs^2,1)-2/Cs 
    118. Public Function gaminv(p, a, b) 
    119.   If p < 0 Or p > 1 Or a <= 0 Or b <= 0 Then 
    120.      gaminv = "NaN" 
    121.      Exit Function 
    122.  Else
    123. Select Case p 
    124.      Case 0 
    125.  gaminv = 0 
    126.      Case 1     
    127.  gaminv = 1 
    128.    Case Else 
    129.  '% Newton's Method 
    130.  '% Permit no more than count_limit interations. 
    131.  count_limit = 100 
    132.    cunt = 0 
    133.  pk = p 
    134.  '% Supply a starting guess for the iteration. 
    135.  '%   Use a method of moments fit to the lognormal distribution. 
    136.  mn = a * b 
    137.  v = mn * b 
    138.  temp = Log(v + mn ^ 2
    139.  mu = 2 * Log(mn) - 0.5 * temp 
    140.  sigma = -2 * Log(mn) + temp 
    141.  xk = Exp(MyNormInv(pk, mu, sigma))  
    142. ''''''''''''''''''''''
    143.   h = 1 
    144.  '% Break out of the iteration loop for three reasons: 
    145.  '%  1) the last update is very small (compared to x) 
    146.  '%  2) the last update is very small (compared to sqrt(eps)) 
    147.  '%  3) There are more than 100 iterations. This should NEVER happen. 
    148.  eps = 2 ^ -10 
    149.  Do While Abs(h) > eps ^ 0.5 * Abs(xk) And Abs(h) > eps ^ 0.5 And cunt < count_limit 
    150.  cunt = tunt + 1 
    151.   h = (GamCdf(xk, a, b) - pk) / gampdf(xk, a, b)  
    152. ''''''''''''' 
    153. xnew = xk - h 
    154. % Make sure that the current guess stays greater than zero
    155. When Newton's Method suggests steps that lead to negative guesses 
    156. % take a step 9/10ths of the way to zero: 
    157. If xnew < 0 Then 
    158.    xnew = xk / 10 
    159.    h = xk - xnew 
    160. End If 
    161. xk = xnew 
    162.  Loop 
    163.  gaminv = xk 
    164.    End Select 
    165. End If  
    166. End Function 
    167.  
    168.  
    169. ' This function is a replacement for the Microsoft Excel Worksheet function NORMSINV. 
    170. ' It uses the algorithm of Peter J. Acklam to compute the inverse normal cumulative 
    171. ' distribution. Refer to 
    172. http://home.online.no/~pjacklam/notes/invnorm/index.html
    173.  for 
    174. ' a description of the algorithm.  
    175. ' Adapted to VB by Christian d'Heureuse, 
    176. http://zanjero.ygblog.com/.
    177.  
    178. Public Function MyNormSInv(ByVal p As Double)  
    179.   '
    180. 计算频率格纸
    181.  
    182. Const a1 = -39.6968302866538, a2 = 220.946098424521, a3 = -275.928510446969 
    183. Const a4 = 138.357751867269, a5 = -30.6647980661472, a6 = 2.50662827745924 
    184. Const b1 = -54.4760987982241, b2 = 161.585836858041, b3 = -155.698979859887 
    185. Const b4 = 66.8013118877197, b5 = -13.2806815528857, c1 = -7.78489400243029E-03 
    186. Const c2 = -0.322396458041136, c3 = -2.40075827716184, c4 = -2.54973253934373 
    187. Const c5 = 4.37466414146497, c6 = 2.93816398269878, d1 = 7.78469570904146E-03 
    188. Const d2 = 0.32246712907004, d3 = 2.445134137143, d4 = 3.75440866190742 
    189. Const p_low = 0.02425, p_high = 1 - p_low 
    190. Dim q As Double, r As Double 
    191.   
    192.   
    193. If p < 0 Or p > 1 Then 
    194.   
    195.    
    196.    Err.Raise vbObjectError, , "NormSInv: Argument out of range." 
    197.   
    198.   
    199. ElseIf p < p_low Then 
    200.   
    201.    
    202.    q = Sqr(-2 * Log(p)) 
    203.   
    204.    
    205.    MyNormSInv = (((((c1 * q + c2* q + c3* q + c4* q + c5* q + c6/ _ 
    206.   
    207.    
    208.    
    209.    
    210.    
    211.   
    212. ((((d1 * q + d2* q + d3* q + d4* q + 1
    213.   
    214.   
    215. ElseIf p <= p_high Then 
    216.   
    217.    
    218.    q = p - 0.5: r = q * q 
    219.   
    220.    
    221.    MyNormSInv = (((((a1 * r + a2* r + a3* r + a4* r + a5* r + a6* q / _ 
    222.   
    223.    
    224.    
    225.    
    226.    
    227.   
    228. (((((b1 * r + b2* r + b3* r + b4* r + b5* r + 1
    229.   
    230.   
    231. Else 
    232.   
    233.    
    234.    q = Sqr(-2 * Log(1 - p)) 
    235.   
    236.    
    237.    MyNormSInv = -(((((c1 * q + c2* q + c3* q + c4* q + c5* q + c6/ _ 
    238.   
    239.    
    240.    
    241.    
    242.    
    243.   
    244. ((((d1 * q + d2* q + d3* q + d4* q + 1
    245.   
    246.   
    247. End If 
    248. End Function 
    249.  
    250.  
    251. '%GAMPDF Gamma probability density function. 
    252. '%  
    253.  Y = GAMPDF(X,A,B) returns the gamma probability density function 
    254. '%  
    255.  with parameters A and B, at the values in X. 
    256. http://zanjero.ygblog.com/
    257.  
    258. Public Function gampdf(x, a, b) 
    259.   y = 0 
    260.   If x = 0 And a < 1 Then   
    261. gampdf = "∞"
    262.    Exit Function 
    263. End If 
    264. If x = 0 And a = 1 Then 
    265.    gampdf = 1 / b 
    266.    Exit Function 
    267. End If 
    268. If a <= 0 Or b <= 0 Then 
    269.    y = "NaN" 
    270.    gampdf = y 
    271.    Exit Function 
    272. ElseIf x > 0 Then 
    273.    y = (a - 1) * Log(x) - x / b - GAMMALN(a) - a * Log(b) 
    274.    y = Exp(y) 
    275. End If 
    276. gampdf = y 
    277. End Function

    https://wenku.baidu.com/link?url=uHtUUETc8q1HAlSV7ChTHRg0SLrBKApRKC-BLFnHHoviqv3G4r4DY8ONIWi_5fKN6DuBURHhAkOfJvGNJg7mFyjjERKRoeWASkFTmK3yvXa&_wkts_=1667896077426
    https://bbs.co188.com/thread-1169888-1-1.html
    2、转成java后代码如下:

    1. import static java.lang.Double.NEGATIVE_INFINITY; //无穷小
    2. import static java.lang.Double.POSITIVE_INFINITY; //无穷大
    3. import static java.lang.Math.*;
    4. public class GammaDist {
    5. //对应excel中GammaDist(x,a,b,true)函数,
    6. public GammaDist(double x,double a,double b, boolean flag){
    7. if(flag){
    8. double p = GamCdf(x,a,b);
    9. if(p>1)
    10. p=1;
    11. else
    12. p=p;
    13. System.out.println (p);
    14. }
    15. }
    16. //%GAMCDF Gamma cumulative distribution function.
    17. //% P = GAMCDF(X,A,B) returns the gamma cumulative distribution
    18. //% function with parameters A and B at the values in X.
    19. public double GamCdf(double x, double a, double b) { //对应excel中GammaDist(x,a,b,true)函数,计算S曲线
    20. double GamCdf = NEGATIVE_INFINITY; //无穷小
    21. if(a<=0 || b<=0) GamCdf = NEGATIVE_INFINITY; //无穷小
    22. GamCdf = GAMMAINC(x / b, a);
    23. double p = GamCdf;
    24. if(p>1)
    25. p=1;
    26. else
    27. p=p;
    28. return GamCdf;
    29. }
    30. //%GAMMAINC Incomplete gamma function.
    31. //% Y = GAMMAINC(X,A) evaluates the incomplete gamma function for
    32. //% corresponding elements of X and A.X and A must be real and the same
    33. //% size (or either can be a scalar).A must also be non-negative.
    34. //% The incomplete gamma function is defined as: http://zanjero.ygblog.com
    35. //%gammainc(x,a) = 1 ./ gamma(a) .*
    36. //%integral from 0 to x of t^(a-1) exp(-t) dt
    37. //% For any a>=0, as x approaches infinity, gammainc(x,a) approaches 1.
    38. //% For small x and a, gammainc(x,a) ~= x^a, so gammainc(0,0) = 1.
    39. public double GAMMAINC(double x, double a) {
    40. double amax;
    41. amax = Math.pow(2,20);
    42. int ascalar = 1;
    43. double GAMMAINC = 0.0;
    44. if(a <=amax) {
    45. if (a != 0 && x != 0 && x < a + 1) {
    46. double xk = x;
    47. double ak = a;
    48. double ap = ak;
    49. double Sum = 1 / ap;
    50. double del = Sum;
    51. for (int i = 0; i < 10000; i++) {
    52. ap = ap + 1;
    53. del = xk * del / ap;
    54. Sum = Sum + del;
    55. }
    56. GAMMAINC = Sum * exp(-xk + ak * log(xk) - GAMMALN(ak));
    57. }
    58. else if (a != 0 && x != 0 && x >= a + 1) {
    59. double xk = x;
    60. double a0 = 1;
    61. double a1 = x;
    62. double b0 = 0;
    63. double b1 = a0;
    64. double ak = a;
    65. double fac = 1;
    66. double n = 1;
    67. double g = b1;
    68. double gold = b0;
    69. for (int i = 0; i < 10000; i++) {
    70. gold = g;
    71. double ana = n - ak;
    72. a0 = (a1 + a0 * ana) * fac;
    73. b0 = (b1 + b0 * ana) * fac;
    74. double anf = n * fac;
    75. a1 = xk * a0 + anf * a1;
    76. b1 = xk * b0 + anf * b1;
    77. fac = 1 / a1;
    78. g = b1 * fac;
    79. n = n + 1;
    80. }
    81. GAMMAINC = 1 - exp(-xk + ak * log(xk) - GAMMALN(ak)) * g;
    82. }
    83. }
    84. return GAMMAINC;
    85. }
    86. //'*****************************************************************************************************
    87. //**************
    88. //%GAMMALN Logarithm of gamma function.
    89. //%Y = GAMMALN(X) computes the natural logarithm of the gamma
    90. //% function for each element of X.GAMMALN is defined as
    91. //% '%LOG(GAMMA(X))
    92. //% '% and is obtained without computing GAMMA(X).Since the gamma
    93. //% function can range over very large or very small values, its
    94. //% logarithm is sometimes more useful.http://zanjero.ygblog.com/
    95. public double GAMMALN( double XX) {
    96. double[] COF = new double[6];
    97. double stp, half, one;
    98. double fpf, x, tmp, ser;
    99. COF[0] = 76.18009173;
    100. COF[1] = -86.50532033;
    101. COF[2] = 24.01409822;
    102. COF[3] = -1.231739516;
    103. COF[4] = 0.00120858003;
    104. COF[5] = -0.00000536382;
    105. stp = 2.50662827465;
    106. half = 0.5;
    107. one = 1;
    108. fpf = 5.5;
    109. x = XX - one;
    110. tmp = x + fpf;
    111. tmp = (x + half) * log(tmp) - tmp;
    112. ser = one;
    113. for(int j=0;j<6;j++) {
    114. x = x + one;
    115. ser = ser + COF[j] / x;
    116. }
    117. double GAMMALN = tmp + log(stp * ser);
    118. return GAMMALN;
    119. }
    120. //GammaInv:(要调用上面的GamCdf和GAMMALN函数)
    121. //%GAMINV Inverse of the gamma cumulative distribution function (cdf).
    122. //% X = GAMINV(P,A,B)returns the inverse of the gamma cdf with
    123. //% parameters A and B, at the probabilities in P. http://zanjero.ygblog.com/
    124. //% 对应Excel中GammaInv(p,a,b)函数,计算PⅢ的Φp值Φp=Cs/2*GammaInv(1-p/100,4/Cs^2,1)-2/Cs
    125. public double gaminv(double p, double a, double b) {
    126. double gaminv = NEGATIVE_INFINITY;//无穷小
    127. if(p <0 || p >1 || a <= 0 || b <= 0) {
    128. gaminv = NEGATIVE_INFINITY;//无穷小
    129. return gaminv;
    130. }
    131. else {
    132. if(p==0){
    133. gaminv = 0;
    134. }
    135. else if(p==1){
    136. gaminv = 1;
    137. }
    138. else {
    139. //% Newton' s Method
    140. //% Permit no more than count_limit interations.
    141. int count_limit = 100;
    142. int cunt = 0;
    143. double pk = p;
    144. //% Supply a starting guess for the iteration.
    145. //% Use a method of moments fit to the lognormal distribution.
    146. double mn = a * b;
    147. double v = mn * b;
    148. double temp = log(v + Math.pow(mn,2));
    149. double mu = 2 * log(mn) - 0.5 * temp;
    150. double sigma = -2 * log(mn) + temp;
    151. double xk = exp(MyNormInv(pk, mu, sigma));
    152. //'' '' '' '' '' '' '' '' '' '' '' '
    153. double h = 1;
    154. //% Break out of the iteration loop for three reasons:
    155. //%1) the last update is very small (compared to x)
    156. //%2) the last update is very small (compared to sqrt(eps))
    157. //%3) There are more than 100 iterations. This should NEVER happen.
    158. double eps = Math.pow(2,-10);
    159. while((abs(h) > Math.pow(eps,0.5) * abs(xk)) && (abs (h) > Math.pow(eps,0.5)) && (cunt
    160. cunt = tunt + 1;
    161. h = (GamCdf(xk, a, b) - pk) / gampdf(xk, a, b);
    162. //'' '' '' '' '' '' '
    163. double xnew = xk - h;
    164. //% Make sure that the current guess stays greater than zero.
    165. //% When Newton 's Method suggests steps that lead to negative guesses
    166. //% take a step 9 / 10 ths of the way to zero:
    167. if(xnew <0) {
    168. xnew = xk / 10;
    169. h = xk - xnew;
    170. }
    171. xk = xnew;
    172. }
    173. gaminv = xk;
    174. }
    175. }
    176. }
    177. //This function is a replacement for the Microsoft Excel Worksheet function NORMSINV.
    178. //It uses the algorithm of Peter J. Acklam to compute the inverse normal cumulative
    179. //distribution. Refer to http://home.online.no/~pjacklam/notes/invnorm/index.html for
    180. // a description of the algorithm.
    181. // Adapted to VB by Christian d'Heureuse, http://zanjero.ygblog.com/.
    182. public double MyNormSInv( double p) {
    183. //计算频率格纸
    184. double a1 = -39.6968302866538, a2 = 220.946098424521, a3 = -275.928510446969;
    185. double a4 = 138.357751867269, a5 = -30.6647980661472, a6 = 2.50662827745924;
    186. double b1 = -54.4760987982241, b2 = 161.585836858041, b3 = -155.698979859887;
    187. double b4 = 66.8013118877197, b5 = -13.2806815528857, c1 = -7.78489400243029E-03;
    188. double c2 = -0.322396458041136, c3 = -2.40075827716184, c4 = -2.54973253934373;
    189. double c5 = 4.37466414146497, c6 = 2.93816398269878, d1 = 7.78469570904146E-03;
    190. double d2 = 0.32246712907004, d3 = 2.445134137143, d4 = 3.75440866190742;
    191. double p_low = 0.02425, p_high = 1 - p_low;
    192. double q, r, MyNormSInv = NEGATIVE_INFINITY;//无穷小;
    193. if (p <0 || p >1) {
    194. System.out.println ("NormSInv: Argument out of range.");
    195. }
    196. else if( p <p_low){
    197. q = sqrt(-2 * log(p));
    198. MyNormSInv = (((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);
    199. }
    200. else if(p <=p_high) {
    201. q = p - 0.5;
    202. r = q * q;
    203. MyNormSInv = (((((a1 * r + a2) * r + a3) * r + a4) * r + a5) * r + a6) * q / (((((b1 * r + b2) * r + b3) * r + b4) * r + b5) * r + 1);
    204. }
    205. else {
    206. q = sqrt(-2 * log(1 - p));
    207. MyNormSInv = -(((((c1 * q + c2) * q + c3) * q + c4) * q + c5) * q + c6) / ((((d1 * q + d2) * q + d3) * q + d4) * q + 1);
    208. }
    209. return MyNormSInv;
    210. }
    211. //GAMPDF Gamma probability density function.
    212. /*
    213. Y = GAMPDF(X,A,B) returns the gamma probability density function
    214. with parameters A and B, at the values in X.
    215. http://zanjero.ygblog.com/
    216. */
    217. public double gampdf(double x, double a, double b){
    218. double y = 0.0;
    219. double gampdf = NEGATIVE_INFINITY;//无穷小
    220. if(x == 0 && a < 1){
    221. gampdf = POSITIVE_INFINITY;//无穷大
    222. return gampdf;
    223. }
    224. if((x==0)&&(a==1)){
    225. gampdf = 1 / b;
    226. return gampdf;
    227. }
    228. if(a <= 0 || b <= 0) {
    229. y = NEGATIVE_INFINITY;//无穷小
    230. gampdf = y;
    231. }
    232. else if (x > 0) {
    233. y = (a - 1) * log(x) - x / b - GAMMALN(a) - a * log(b);
    234. y = exp(y);
    235. }
    236. gampdf = y;
    237. return gampdf;
    238. }
    239. }

    3、结论,转换未成功,函数MyNormInv和变量tunt未找到,有知道的请留言告知。

    三、最后使用org.apache.commons.math3.distribution.GammaDistribution类中的方法成功。参考地址:https://vimsky.com/examples/detail/java-class-org.apache.commons.math3.distribution.GammaDistribution.html

  • 相关阅读:
    ffmpeg图片转YUV格式
    #边学边考 必修5 高项:对人管理 第2章 项目沟通管理和干系人管理
    基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用
    ROS基础学习
    盲盒小程序开发:创新科技与消费者心理的完美结合
    Spring系列:基于XML的方式构建IOC
    细聊.Net Core中IServiceScope的工作方式
    nodejs+vue线上生活超市购物商城系统w2c42
    [工业自动化-6]:西门子S7-15xxx编程 - PLC系统硬件组成与架构
    Android onbackpressed 拦截返回键并弹窗
  • 原文地址:https://blog.csdn.net/cwr888/article/details/127755554