Организация параллельных потоков. Часть 2 | страница 22
Рис. 5.9. Преобразование строки в целое число
Запускаем программу и проверяем разные входные значения (рис. 5.10).
Напомним, что целое число типа int хранится в виде 4 байтов. Соответственно можно оценить диапазон значений для целого числа со знаком. Максимальное значение — это 2 в 31-й степени, то есть чуть больше двух миллиардов.
При выходе за пределы возможных значений мы получаем минимальное и максимальное число соответственно:
— 2>31 … 2>31—1.
Рис. 5.10. Результаты преобразования
Задание. Проверьте, как преобразуются вводимые числа. Проверьте, что происходит при выходе за границы допустимых значений. Вычислите минимальное и максимальное значения с помощью Калькулятора — Calculator, переключив его в режим научных вычислений.
В наших опытах нам потребуется значение больше, чем два миллиарда. Для этого придётся использовать другой целый тип — long long (8 байт).
Немного изменим нашу программу (рис. 5.11).
Для преобразования строки символов в длинное целое тоже нужна другая функция с похожим названием:
long long atoll (const char *str).
Расшифровка названия:
Convert «a» (string of symbols) to long long integer.
Вывод на экран длинного целого тоже требует своего, особого формата:
%lld.
Рис. 5.11. Преобразование строки в длинное целое
Запускаем нашу новую программу с разными входными значениями (рис. 5.12).
Здесь мы тоже можем найти пределы, выше которых подняться не удаётся.
Результаты нас устраивают. Нам пока что такое большое число не грозит.
Рис. 5.12. Результаты преобразования
Задание. Составьте программу (рис. 5.11) и проверьте правильность её работы.
5.4. Управление циклом
Мы научились вводить число из командной строки. Теперь мы сможем управлять поведением программы, не изменяя исходный текст.
Возьмём нашу «большую задачу» параллельного суммирования из раздела 4 и немного её усложним (рис. 5.13).
Зададим число итераций цикла из командной строки (строка 11).
А программа пусть выводит на экран время расчётов (строка 25).
Рис. 5.13. Управление циклом из командной строки
Запускаем программу в командной строке и подбираем число итераций в цикле. Нам нужно получить приемлемое время выполнения программы — около 20 секунд. Затем запускаем программу несколько раз (рис. 5.14).
Тем временем следим за загрузкой ядер процессора. Должно быть 100%
Рис. 5.14. Четыре запуска
Задание. Составьте программу (рис. 5.13) и подберите приемлемое число итераций. Запустите программу несколько раз и обратите внимание на длительность решения задачи.