Другие языки программирования и технологии

c++ нужна помощь )

Смысл такой. Есть определенная функция, которая находит последовательность Фибоначчи и выводит найденные значения на печать. В задании предлагается выводить эти числа, пока определенное число из последовательности не превысит максимально возможное число для типа int. В цикле , число на каждом шагу цикла сохранено в переменной int sum. Вот как записать проверку, что sum<=int. Ведь именно так не запишешь, а точное значение, максимально возможное для int, мы не знаем( знаем конечно, но надо программным способом, чтоб его автоматом комп подставлял)
Джасур Исхаков
Джасур Исхаков
45 384
Ну конечно про INT_MAX и про sizeof тут много умных вещей написали, но теперь внимание вопрос: и что? Ну знаем мы верхнюю границу типа int, и что? Наша переменная, которая хранит текущий член последовательности, никогда не станет больше ее. Потому что в принципе не может. Если нам очень сильно повезет, то она станет равной ей, но что-то я в этом сильно сомневаюсь, что мы так удачно попадем.

Григорий, я Вам посоветую такой прием. Когда при вычислении очередного члена последовательности Фибоначи, он превысит INT_MAX, у Вас произойдет переполнение типа. При этом, какие бы два целых числа Вы ни складывали, их сумма (в случае переполнения типа) будет обязательно меньше каждого из слагаемых.
При вычислении последовательности Фибоначи, Вы "помните" предыдущий и предпредыдущий член этой же последовательности. Итак, вычислив i-й член, Вы просто сравниваете его с (i-1)-м. Если i-й больше - все в порядке. Если же он вдруг "волшебным" образом стал меньше (i-1)-го, значит, Вы исчерпали возможности типа int.
ВП
Владимир Павлов
591
Лучший ответ
Джасур Исхаков Я заметил этот недостаток с переполнением типа после тестового запуска. Сделал так:
if( sum 0) vi.push_back(sum);
if(sum
используй константу INT_MAX))
Или в других версиях проверяй число на сравнение степени двойки и size_of(int) - инт на разных машинах и в разных компиляторах от 2х до 8и байт и может ограничиваться разным
ФК
Фан Кап
75 320
limits.h — заголовочный файл стандартной библиотеки общего назначения языка программирования Си, который включает определения характеристик общих типов переменных. Значения зависят от специфики реализации, но могут быть не ниже диапазона, определенного для конечного значения в удобной реализации Си.

Из нее можно "выбрать" константу, имеющая значение соответствующего предела значения переменной.

INT_MINМинимальное значение для int−2,147,483,648−2,147,483,648≤ -32,767
INT_MAXМаксимальное значение для int+2,147,483,647+2,147,483,647≥ +32,767

ru . wikipedia . org / wiki / Limits.h
Артем Осипов
Артем Осипов
1 339
Фан Кап частично правильно
INT_MAX прописывается в хедерах
Википедия хороша, но иногда врёт - инт от одного байта до 8ми (зависит от языка, компилятора, операционки)и границы получаются совсем разные
максимальное значение int (32) = 2147483647
Зачем программно, подставляй так. в условии про программно ничего не было, если я правильно понимаю

pps но если совсем надо - то узнать размер переменной (объекта) данного типа можно с помощью функции sizeof(),

sizeof(int)
Джасур Исхаков Точное значение я знаю, это 2 в 31 степени( с учетом отрицательных чисел) . Мне нужен универсальный метод, который будет работать с любыми типами. Например, процессор знает размер типа double. Предположим, я его не знаю. Но в процессе сравнения процессор сам сможет подставить значение типа double, и выяснить, выполнено условие или нет.
Здесь вот в чем загвоздка. Команда sizeof(int) выдает в результате 4 байта( 4)
Если я пишу команду if(sum
используй константу INT_MAX из заголовочного файла limits.h ( #include<limits.h> )
или создай свою константу типа #define MAXIMUM_INT 2147483647