История изменений
Исправление
sambist,
(текущая версия)
:
Вот те варианты вычислений что пробовал:
uint32_t sqrti(uint32_t value)
{
//heron
uint32_t p;
uint32_t n = value;
do
{
p = n;
n = (p + value / p) >> 1;
}
while (p > n);
return n;
// return n;
//fast
// unsigned int m, y, b;
// m = 0x4000;
// y = 0;
// while (m != 0){
// b = y | m;
// y = y >> 1;
// if (value >= b) {
// value = value - b;
// y = y | m;
// }
// m = m >> 2;
// }
// return y;
// chld
// uint32_t c = 0;
// uint32_t d = 1;
// while (value)
// {
// value -= d;
// c++;
// d += 2;
// }
// return c;
//root a few iterations
// uint32_t x;
// x = (value / 0x3f + 0x3f) >> 1;
// x = (value / x + x) >> 1;
// x = (value / x + x) >> 1;
// return x;
}
Все на двух корнях показывают 42, на одном 30 секунд.
Исходная версия
sambist,
:
Вот те варианты вычислений что пробовал:
uint32_t sqrti(uint32_t value)
{
//heron
uint32_t p;
uint32_t n = value;
do
{
p = n;
n = (p + value / p) >> 1;
}
while (p > n);
return n;
// return n;
//fast
// unsigned int m, y, b;
// m = 0x4000;
// y = 0;
// while (m != 0){
// b = y | m;
// y = y >> 1;
// if (value >= b) {
// value = value - b;
// y = y | m;
// }
// m = m >> 2;
// }
// return y;
// chld
// uint32_t c = 0;
// uint32_t d = 1;
// while (value)
// {
// value -= d;
// c++;
// d += 2;
// }
// return c;
//root a few iterations
// uint32_t x;
// x = (value / 0x3f + 0x3f) >> 1;
// x = (value / x + x) >> 1;
// x = (value / x + x) >> 1;
// return x;
}