FGV, искренне рад Вашему интересу к прикладной задаче.
Ускорение работы есть, но можно ли считать задачу решённой?
Если следовать строго букве задачи:
Извлечение корня из целого с округлением до ближайшего целого
На платформе, обозначенной в статье, фиксируются случайные ошибки округления на всём множестве значений аргумента.
test for quality with in range[0..1000]
isqrt(7)=2 <=> 3 (2.65)
isqrt(8)=2 <=> 3 (2.83)
isqrt(13)=3 <=> 4 (3.61)
isqrt(14)=3 <=> 4 (3.74)
too many mistakes ... test failed.
test for quality with in range[1000..10000]
isqrt(1000)=31 <=> 32 (31.62)
isqrt(1001)=31 <=> 32 (31.64)
isqrt(1002)=31 <=> 32 (31.65)
isqrt(1003)=31 <=> 32 (31.67)
too many mistakes ... test failed.
test for quality with in range[10000..100000]
isqrt(10101)=100 <=> 101 (100.50)
isqrt(10102)=100 <=> 101 (100.51)
isqrt(10103)=100 <=> 101 (100.51)
isqrt(10104)=100 <=> 101 (100.52)
too many mistakes ... test failed.
***********
test range=[0..1000], repeat=100
_fpu ... , _evn ... , isqrt ... ,
test range=[0..10000], repeat=10
_fpu ... , _evn ... , isqrt ... ,
test range=[0..100000], repeat=1
_fpu ... , _evn ... , isqrt ... ,
***********
range _fpu _evn isqrt
1000 5120 680 619
10000 5142 782 693
100000 5148 922 716
done.
на стм надо будет изменить типы на соответствующие int -16bit, long -32bit
Типы переменных в коде оставил как есть. Если правильная работа Вашего кода зависит от размерности и знака целых, назначьте нужные типы, пользуясь определениями из <stdint.h>.
Однако, вводит в некоторое заблуждение отсутствие конкретики в замечаниях.
Думаю, многим было бы интересно узнать, во сколько раз алгоритм sqrt_fpu опережает sqrt_env на премиальных платформах Cortex?
Или, во сколько раз IQmath быстрее на бюджетном микроконтроллере, чем sqrt_env?
Сколько требуются вычислительных ресурсов и какие появляются риски в том или ином случае при производстве устройств для работы на ответственных участках?
Возвращаясь к прикладной задаче.
Извлечение квадратного корня из целого
с округлением до ближайшего целого.
Задача была решена в установленных технических условиях. Метод и порядок решения раскрыты в публикации. Результат можно подвергать сомнениям, проверять и улучшать.
Допускаю, что существуют отличные решения для отличных технических условий. Буду рад случаю узнать о них что-нибудь конкретно.
Это очевидно, что хорошая программа будет работать даже на бюджетном железе.
Однако сомнительно, что премиальное железо сделает плохую программу лучше.
Статья о приёме программирования, сокращающем число итераций через увеличение размера кода до цикла. В данном контексте железо служит фоном, подсвечивающим данный метод.
Для целого аргумента без знака функция sqrt_odd может быть, например, такой:
uint16_t sqrt_odd ( uint32_t L )
{
if ( L < 2 )
return ( uint16_t ) L;
uint16_t div = 1, rslt = 1;
while ( 1 )
{
div += 2;
if ( ( uint32_t ) div >= L )
return rslt;
L -= div, rslt++;
}
}
Спасибо за внимание к моей статье. Ошибку в тексте исправил.
Прошу пояснить.
0.5 — это чего, если на входе и на выходе целые числа?
FGV, искренне рад Вашему интересу к прикладной задаче.
Ускорение работы есть, но можно ли считать задачу решённой?
Если следовать строго букве задачи:
На платформе, обозначенной в статье, фиксируются случайные ошибки округления на всём множестве значений аргумента.
Типы переменных в коде оставил как есть. Если правильная работа Вашего кода зависит от размерности и знака целых, назначьте нужные типы, пользуясь определениями из <stdint.h>.
Согласен. Существует много хороших программ.
Вопрос выбора.
Однако, вводит в некоторое заблуждение отсутствие конкретики в замечаниях.
Думаю, многим было бы интересно узнать, во сколько раз алгоритм sqrt_fpu опережает sqrt_env на премиальных платформах Cortex?
Или, во сколько раз IQmath быстрее на бюджетном микроконтроллере, чем sqrt_env?
Сколько требуются вычислительных ресурсов и какие появляются риски в том или ином случае при производстве устройств для работы на ответственных участках?
Возвращаясь к прикладной задаче.
Задача была решена в установленных технических условиях. Метод и порядок решения раскрыты в публикации. Результат можно подвергать сомнениям, проверять и улучшать.
Допускаю, что существуют отличные решения для отличных технических условий. Буду рад случаю узнать о них что-нибудь конкретно.
Стараюсь понять Вашу мысль, Dima_Sharihin.
Это очевидно, что хорошая программа будет работать даже на бюджетном железе.
Однако сомнительно, что премиальное железо сделает плохую программу лучше.
Статья о приёме программирования, сокращающем число итераций через увеличение размера кода до цикла. В данном контексте железо служит фоном, подсвечивающим данный метод.
Для целого аргумента без знака функция sqrt_odd может быть, например, такой:
Спасибо за внимание к моей статье. Ошибку в тексте исправил.