Я только начинаю учиться C. Я пытаюсь найти максимальное значение int путем вычисления (на самом деле я пытаюсь найти максимальное значение float через тот же метод, но я хочу сначала проверить его на int). Логика кажется ОК, но моя функция всегда возвращает 0 в конце.Функция для вычисления максимального значения int, не возвращающего желаемый результат
int max_int_helper(int base)
{
int prev_i, next_i, counter;
counter = 1;
prev_i = next_i = base + counter;
// found max
if (next_i < base) {
printf("WE RETURN BASE %d\n", base);
return base;
} else {
while(prev_i <= next_i)
{
prev_i = next_i;
counter *= 2;
next_i = base + counter;
}
max_int_helper(prev_i);
}
}
Я называю это в моей основной функции как этот
printf("max int calculated: %d", max_int_helper(0));
Но когда я бегу, что я получаю это:
Отдаем БАЗА 2147483647 макс INT рассчитывается: 0
Я явно помещаю инструкцию printf, так что я «уверен», что я возвращаюсь только один раз, и значение верное.
Пожалуйста, укажите мне, где это происходит.
Вы * сделать * знать, что целочисленное переполнение не определено, верно? – EOF
Я этого не делал. Теперь я это делаю. –
Хорошо, посмотрите на стандарт C. C11 проект стандарта n1570 (открыто доступен в Интернете): '6.5 Выражения, раздел 5 Если при оценке выражения возникает исключительное условие (то есть, если результат не определен математически или нет в диапазоне представляемых значений для его тип), поведение не определено. ' – EOF