Ответ 1
Sylvie Boldo официально подтвердил что число с плавающей запятой, удовлетворяющее условиям вашего вопроса, не существует.
Цитируя реферат статьи:
Специалисты с плавающей точкой знают, что математические формулы могут терпеть неудачу или дают неточные результаты при реализации в арифметике с плавающей запятой. В этой статье описывается пример, где, как ни удивительно, это совершенно не случай. Действительно, используя radix 2 и неограниченный диапазон экспоненты, вычисление квадратного корня квадрата число с плавающей запятой a равно | a |. Следствием этого является тот факт, что вычисление с плавающей запятой a/sqrt (a 2 + b 2) всегда находится в интервал [-1, 1]. Это устраняет необходимость тестирования при вызове arccos или arcsin для этого значения. Для получения дополнительных гарантий это свойство была официально проверена с использованием помощника Coq proof и Flocq библиотека. В заключении будут даны намеки на то, что произойдет без предположения и в других областях, где поведение очень отличается.
"using radix 2", вероятно, был неявным в вашем вопросе (хотя IEEE также стандартизовал десятичные числа с плавающей запятой и форматы и операции), а "неограниченный диапазон экспонентов" эквивалентен вашему ограничению "без переполнения или недостаточного потока".
Причиной создания возможного свойства является то, что x*x
"расширяется" (интервал [1,2] отображается, например, на [1,4]) таким образом, что при отсутствии переполнения или underflow, округление, которое может произойти для *
, является доброкачественным, а x
по-прежнему является самым близким представляемым числом с плавающей запятой к истинному квадратному корню из продукта с плавающей запятой x*x
. Этот волнистый аргумент не является доказательством, поэтому хорошо, что статья, связанная выше, содержит один.