A float (a.k.a. single) значение является 4-байтовым значением и должно представлять любое действительное значение. Из-за способа форматирования и конечного количества байтов он отключается, существует минимальное значение и максимальное значение, которое оно может представлять, и оно имеет конечную точность, в зависимости от его собственного значения.
Я хотел бы знать, если есть способ, чтобы получить наиболее близкое возможное значение выше или ниже некоторого эталонного значения, учитывая конечную точность поплавка. С целыми числами это тривиально: один просто добавляет или вычитает 1. Но с float вы не можете просто добавить или вычесть минимальное значение поплавка и ожидать, что он будет отличаться от вашего исходного значения. То есть.
float FindNearestSmaller (const float a)
{
return a - FLT_MIN; /* This doesn't necessarily work */
}
Фактически, вышеизложенное почти никогда не будет работать. В приведенном выше случае возврат, как правило, будет равен a, так как FLT_MIN намного превосходит точность a. Вы можете легко попробовать это самостоятельно: он работает, например, 0.0f, или для очень маленьких чисел порядка FLT_MIN, но не для чего-либо между 0 и 100.
Итак, как бы вы получили значение, которое является самым близким, но меньшим или большим, чем a, с учетом точности с плавающей запятой?
Примечание: Хотя я в основном интересуюсь ответом на C/С++, я предполагаю, что ответ будет применим для большинства языков программирования.