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/С++, я предполагаю, что ответ будет применим для большинства языков программирования.