Я решаю одно из упражнений C Primer Plus, занимающихся потоком с плавающей точкой. Задача - имитировать его. Я сделал это так:Float underflow in C пояснение
#include<stdio.h>
#include<float.h>
int main(void)
{
// print min value for a positive float retaining full precision
printf("%s\n %.150f\n", "Minimum positive float value retaining full precision:",FLT_MIN);
// print min value for a positive float retaining full precision divided by two
printf("%s\n %.150f\n", "Minimum positive float value retaining full precision divided by two:",FLT_MIN/2.0);
// print min value for a positive float retaining full precision divided by four
printf("%s\n %.150f\n", "Minimum positive float value retaining full precision divided by four:",FLT_MIN/4.0);
return 0;
}
Результат является
Minimum positive float value retaining full precision: 0.000000000000000000000000000000000000011754943508222875079687365372222456778186655567720875215087517062784172594547271728515625000000000000000000000000
Minimum positive float value retaining full precision divided by two: 0.000000000000000000000000000000000000005877471754111437539843682686111228389093327783860437607543758531392086297273635864257812500000000000000000000000
Minimum positive float value retaining full precision divided by four: 0.000000000000000000000000000000000000002938735877055718769921841343055614194546663891930218803771879265696043148636817932128906250000000000000000000000
я ожидал меньше точности для минимального значения с плавающей точкой разделить на два и четыре, но это, кажется, точность в порядке и нет сгущенной ситуации. Как это возможно? Я что-то пропустил?
Большое спасибо
Аргументы, которые не соответствуют параметрам функций в прототипе претерпевают акции по умолчанию. –
@Kerrek SB Ваш комментарий верен, но не влияет на так называемое отсутствие «ожидаемой меньшей точности» OP, если код использует IEEE 754 [binary32] (https://en.wikipedia.org/wiki/Single-precision_floating-point_format). – chux