All streams
Search
Write a publication
Pull to refresh
25
5
Nikolai @ngis

Программирование. Качество гарантированное опытом.

Send message

Прошу пояснить.


максимальная ошибка для чисел от 0 до 100000 не превышает 0.5

0.5 — это чего, если на входе и на выходе целые числа?

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?


Сколько требуются вычислительных ресурсов и какие появляются риски в том или ином случае при производстве устройств для работы на ответственных участках?


Возвращаясь к прикладной задаче.


Извлечение квадратного корня из целого
с округлением до ближайшего целого.

Задача была решена в установленных технических условиях. Метод и порядок решения раскрыты в публикации. Результат можно подвергать сомнениям, проверять и улучшать.


Допускаю, что существуют отличные решения для отличных технических условий. Буду рад случаю узнать о них что-нибудь конкретно.

Стараюсь понять Вашу мысль, Dima_Sharihin.


Это очевидно, что хорошая программа будет работать даже на бюджетном железе.


Однако сомнительно, что премиальное железо сделает плохую программу лучше.


Статья о приёме программирования, сокращающем число итераций через увеличение размера кода до цикла. В данном контексте железо служит фоном, подсвечивающим данный метод.

Вы правы, dmitryrf!

Для целого аргумента без знака функция 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++;
    }
}


Спасибо за внимание к моей статье. Ошибку в тексте исправил.

Information

Rating
967-th
Location
Россия
Registered
Activity

Specialization

Fullstack Developer, Project Manager
Senior