Мне трудно понять правила C о том, какую точность предполагать при печати двойников или при преобразовании строк в двойные. Следующая программа должна проиллюстрировать мою точку зрения:
#include <errno.h>
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
double x, y;
const char *s = "1e-310";
/* Should print zero */
x = DBL_MIN/100.;
printf("DBL_MIN = %e, x = %e\n", DBL_MIN, x);
/* Trying to read in floating point number smaller than DBL_MIN gives an error */
y = strtod(s, NULL);
if(errno != 0)
printf(" Error converting '%s': %s\n", s, strerror(errno));
printf("y = %e\n", y);
return 0;
}
Результат, который я получаю при компиляции и запуске этой программы (на Core 2 Duo с gcc 4.5.2):
DBL_MIN = 2.225074e-308, x = 2.225074e-310
Error converting '1e-310': Numerical result out of range
y = 1.000000e-310
Мои вопросы:
Спасибо за любую помощь, которую вы можете оказать. Я постараюсь прояснить вопрос по мере получения обратной связи.