Easyelectronics.ru

Электроника для всех
Текущее время: 20 сен 2020, 19:54

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Constexpr sqrt и метод Герона
СообщениеДобавлено: 28 ноя 2018, 16:18 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1604
Откуда: void
Нужно было как-то вычислить в программе константное число с плавающей точкой - квадратный корень из двух других константных чисел, на этапе компиляции. На просторах интернета найден (и проверен) такой код:

Код:
constexpr float sqrtNR(float x, float curr, float prev) {
   return curr == prev ? curr : sqrtNR(x, 0.5f * (curr + x / curr), curr);
}

constexpr float sqrtexpr(float x) {
   return (x >= 0.f) && (x < std::numeric_limits<float>::infinity()) ?
   sqrtNR(x, x, 0.f) : std::numeric_limits<float>::quiet_NaN();
}


Он прекрасен, особенно проверка на равенство curr и prev. Я сперва не понял, но смысл именно в том, что вычисление корня заканчивается только тогда, когда достигается предел точности для типа float. Но тут возник вопрос, а всегда ли гарантируется завершение работы для таким образом поставленного условия при стандарте IEEE 754. Напомню, число округляется до ближайшего значения (для положительных вещественных чисел). Интересно ваше мнение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Constexpr sqrt и метод Герона
СообщениеДобавлено: 28 ноя 2018, 20:10 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
В непрерывном виде формула никогда не перескакивает за идеальный результат. То есть, если приближение начало убывать, оно будет убывать бесконечно. Если нало возрастать, оно будет возрастать бесконечно.

В переложении на дискретные рельсы, окажется, что технически один раз перепрыгнуть через идеальный результат формула может. Но на этом все и остановится.

Осциляции в любом случае не начнуться.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: FuIcrum, tonyk


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB