Вам не нужно проверять двоичное представление напрямую, но вы должны полагаться на него, чтобы получить точный ответ, я думаю.
Начните с использования frexp () дляразбить x на экспоненту exp
и мантиссу.Я полагаю, что следующее число больше x равно x + eps * 2^(exp-1)
.(«-1» означает, что frexp возвращает мантиссу в диапазоне [1/2, 1), а не [1, 2).)
Если x и y имеют одинаковый показатель степени, вы в основном сделали,В противном случае вам нужно посчитать, сколько шагов происходит на степень 2, что составляет всего 1.0/eps
.Другими словами, количество шагов между 2 ^ n и 2 ^ (n + 1) равно 1.0/eps
.
Итак, для y> x подсчитайте, сколько шагов от x до следующей степенииз двух;затем посчитайте, сколько еще шагов нужно, чтобы достичь наибольшей степени 2, меньшей y;затем посчитайте, сколько еще шагов нужно, чтобы добраться оттуда до y.Все это довольно легко выразить в терминах eps
, я думаю.