We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 684e6d2 commit 3ba28d6Copy full SHA for 3ba28d6
ext/bcmath/libbcmath/src/sqrt.c
@@ -76,14 +76,12 @@ bool bc_sqrt(bc_num *num, size_t scale)
76
cscale = (*num)->n_scale;
77
} else {
78
/* The number is greater than 1. Guess should start at 10^(exp/2). */
79
- bc_init_num(&guess);
80
- bc_int2num(&guess, 10);
+ /* If just divide size_t by 2 it will not overflow. */
+ size_t exponent_for_initial_guess = (size_t) (*num)->n_len >> 1;
81
82
- bc_int2num(&guess1, (*num)->n_len);
83
- bc_multiply_ex(guess1, point5, &guess1, 0);
84
- guess1->n_scale = 0;
85
- bc_raise_bc_exponent(guess, guess1, &guess, 0);
86
- bc_free_num (&guess1);
+ /* 10^n is a 1 followed by n zeros. */
+ guess = bc_new_num(exponent_for_initial_guess + 1, 0);
+ guess->n_value[0] = 1;
87
cscale = 3;
88
}
89
0 commit comments