MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / pow5mult

Function pow5mult

strings/dtoa.c:1021–1062  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1019#define P5A_MAX (sizeof(p5_a)/sizeof(*p5_a) - 1)
1020
1021static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc)
1022{
1023 Bigint *b1, *p5, *p51=NULL;
1024 int i;
1025 static int p05[3]= { 5, 25, 125 };
1026 my_bool overflow= FALSE;
1027
1028 if ((i= k & 3))
1029 b= multadd(b, p05[i-1], 0, alloc);
1030
1031 if (!(k>>= 2))
1032 return b;
1033 p5= p5_a;
1034 for (;;)
1035 {
1036 if (k & 1)
1037 {
1038 b1= mult(b, p5, alloc);
1039 Bfree(b, alloc);
1040 b= b1;
1041 }
1042 if (!(k>>= 1))
1043 break;
1044 /* Calculate next power of 5 */
1045 if (overflow)
1046 {
1047 p51= mult(p5, p5, alloc);
1048 Bfree(p5, alloc);
1049 p5= p51;
1050 }
1051 else if (p5 < p5_a + P5A_MAX)
1052 ++p5;
1053 else if (p5 == p5_a + P5A_MAX)
1054 {
1055 p5= mult(p5, p5, alloc);
1056 overflow= TRUE;
1057 }
1058 }
1059 if (p51)
1060 Bfree(p51, alloc);
1061 return b;
1062}
1063
1064
1065static Bigint *lshift(Bigint *b, int k, Stack_alloc *alloc)

Callers 2

my_strtod_intFunction · 0.85
dtoaFunction · 0.85

Calls 3

multaddFunction · 0.85
multFunction · 0.85
BfreeFunction · 0.85

Tested by

no test coverage detected