INTERNATIONAL JOURNAL OF SCIENTIFIC RESEARCHERS
ISSN: 3030-332X Impact factor: 8,293
Volume 12, issue 1, June 2025
https://wordlyknowledge.uz/index.php/IJSR
worldly knowledge
Index:
google scholar, research gate, research bib, zenodo, open aire.
https://scholar.google.com/scholar?hl=ru&as_sdt=0%2C5&q=wosjournals.com&btnG
https://www.researchgate.net/profile/Worldly-Knowledge
https://journalseeker.researchbib.com/view/issn/3030-332X
19
АНАЛИЗ ВЛИЯНИЯ ВЫБОРА ТИПОВ ДАННЫХ НА ПРОИЗВОДИТЕЛЬНОСТЬ
И ТОЧНОСТЬ ВЫЧИСЛЕНИЙ В C++
Ибрагимов Шавкат Мамирович
Ферганский государственный университет, факультет физики - математики,
старший преподаватель кафедры информационные технологии.
http://orcid.org/0000-0001-7812-1898
Аннотация:
В данной статье исследуется влияние выбора типов данных на
производительность и точность вычислений в языке программирования C++.
Рассматриваются основные типы данных, их характеристики, области применения и
компромиссы между точностью и скоростью выполнения операций. Приводятся
практические рекомендации по выбору оптимальных типов данных для различных
сценариев вычислений. Статья содержит сравнительный анализ производительности,
примеры потери точности и методы её сохранения, а также рекомендации по
оптимизации кода с учётом особенностей работы с числами с плавающей точкой и
целочисленными типами.
Abstract:
This article examines the impact of data type selection on the performance and
accuracy of calculations in the C++ programming language. It considers the main data types,
their characteristics, areas of application, and trade-offs between accuracy and speed of
operations. Practical recommendations for selecting optimal data types for various calculation
scenarios are provided. The article contains a comparative analysis of performance, examples of
loss of accuracy and methods for preserving it, as well as recommendations for code
optimization taking into account the specifics of working with floating-point numbers and
integer types.
Ключевые слова
: C++, типы данных, производительность, точность вычислений,
оптимизация, числа с плавающей точкой, целочисленные типы
Keywords:
C++, data types, performance, calculation accuracy, optimization, floating point
numbers, integer types
ВВЕДЕНИЕ
Современные вычислительные системы позволяют обрабатывать огромные объёмы
данных с высокой скоростью. Однако выбор неподходящего типа данных может
привести как к значительной потере производительности, так и к накоплению ошибок
вычислений, что особенно критично в научных расчётах, финансовых приложениях и
системах реального времени [6],[8].
В языке C++ разработчик имеет широкий выбор типов данных - от 8-битных целых чисел
до 64-битных чисел с плавающей точкой двойной точности. Каждый тип имеет свои
характеристики по занимаемой памяти, диапазону значений и точности представления
чисел [3]. Неоптимальный выбор типа данных может привести к:
1.
Избыточному использованию памяти и снижению производительности
2.
Накоплению ошибок округления в численных алгоритмах
3.
Переполнению и неожиданным результатам вычислений
INTERNATIONAL JOURNAL OF SCIENTIFIC RESEARCHERS
ISSN: 3030-332X Impact factor: 8,293
Volume 12, issue 1, June 2025
https://wordlyknowledge.uz/index.php/IJSR
worldly knowledge
Index:
google scholar, research gate, research bib, zenodo, open aire.
https://scholar.google.com/scholar?hl=ru&as_sdt=0%2C5&q=wosjournals.com&btnG
https://www.researchgate.net/profile/Worldly-Knowledge
https://journalseeker.researchbib.com/view/issn/3030-332X
20
4.
Проблемам с воспроизводимостью результатов на разных платформах
Цель исследования
Целью данной работы является систематический анализ влияния выбора типов данных
на производительность и точность вычислений в C++, а также разработка практических
рекомендаций по выбору оптимальных типов для различных классов задач.
Актуальность исследования
С ростом объёмов обрабатываемых данных и сложности вычислительных алгоритмов
вопросы оптимизации использования типов данных становятся особенно актуальными. В
научных вычислениях накопление ошибок округления может сделать результаты
непригодными для анализа, а в коммерческих приложениях ошибки округления могут
привести к значительным финансовым потерям [2], [5].
АНАЛИЗ ЛИТЕРАТУРЫ И МЕТОДЫ
Для проведения исследования были использованы следующие методы:
1.
Теоретический анализ представления чисел в памяти компьютера согласно
стандарту IEEE 754
2.
Экспериментальное измерение производительности операций с различными
типами данных
3.
Анализ накопления ошибок в типовых численных алгоритмах
4.
Сравнительный анализ использования типов данных в реальных проектах
Классификация типов данных в C++
В C++ типы данных можно разделить на несколько основных категорий [7]:
1.
Целочисленные типы:
o
char (1 байт)
o
short (2 байта)
o
int (4 байта)
o
long long (8 байт)
o
Беззнаковые варианты (unsigned)
2.
Типы с плавающей точкой:
o
float (4 байта, ~7 десятичных знаков)
o
double (8 байт, ~16 десятичных знаков)
o
long double (обычно 10 или 16 байт)
3.
Пользовательские типы:
o
Классы
o
Структуры
o
Объединения
Методика тестирования производительности
Для измерения производительности использовался следующий подход:
1.
Создание тестовых массивов данных различных типов
2.
Выполнение типовых операций (сложение, умножение, деление) в цикле
3.
Измерение времени выполнения с помощью высокоточных таймеров
4.
Сравнение результатов для разных типов данных
5.
Анализ влияния оптимизаций компилятора
Методика анализа точности
Для анализа точности вычислений использовались:
1.
Вычисление известных математических констант (π, e)
2.
Анализ накопления ошибок в рекуррентных алгоритмах
3.
Сравнение результатов с эталонными значениями
INTERNATIONAL JOURNAL OF SCIENTIFIC RESEARCHERS
ISSN: 3030-332X Impact factor: 8,293
Volume 12, issue 1, June 2025
https://wordlyknowledge.uz/index.php/IJSR
worldly knowledge
Index:
google scholar, research gate, research bib, zenodo, open aire.
https://scholar.google.com/scholar?hl=ru&as_sdt=0%2C5&q=wosjournals.com&btnG
https://www.researchgate.net/profile/Worldly-Knowledge
https://journalseeker.researchbib.com/view/issn/3030-332X
21
4.
Оценка обусловленности матриц при решении систем линейных уравнений
РЕЗУЛЬТАТЫ И ОБСУЖДЕНИЕ
Сравнение характеристик типов данных
Таблица 1.
Основные характеристики численных типов данных в C++. [3], [6]
Тип
данных
Размер
(байт)
Диапазон
значений
Точность
(дес.
знаки)
Скорость
операций
int
4
±2.1·10⁹
Точно
Очень высокая
float
4
±3.4·10³⁸
~7
Высокая
double
8
±1.7·10³⁰⁸
~16
Средняя
long double 16
±1.1·10⁴⁹³²
~19
Низкая
Рисунок 1. График оценивания снижения скорости вычислений с увеличением точности
и размера данных.
График наглядно сравнивает основные характеристики типов данных int, float, double и
long double:
Размер (байт)
Точность (количество десятичных знаков)
Скорость операций (оценочно, числовое значение: Очень высокая = 3, Высокая =
2, Средняя = 1, Низкая = 0)
На графике:
Бирюзовые столбцы — размер в байтах.
Оранжевые — точность (количество десятичных знаков).
Красные — скорость операций (чем выше столбец, тем быстрее операции).
График позволяет быстро оценить, как с увеличением точности и размера данных
снижается скорость вычислений.
Производительность операций
INTERNATIONAL JOURNAL OF SCIENTIFIC RESEARCHERS
ISSN: 3030-332X Impact factor: 8,293
Volume 12, issue 1, June 2025
https://wordlyknowledge.uz/index.php/IJSR
worldly knowledge
Index:
google scholar, research gate, research bib, zenodo, open aire.
https://scholar.google.com/scholar?hl=ru&as_sdt=0%2C5&q=wosjournals.com&btnG
https://www.researchgate.net/profile/Worldly-Knowledge
https://journalseeker.researchbib.com/view/issn/3030-332X
22
Эксперименты показали, что производительность операций существенно зависит от типа
данных:
1.
Целочисленные операции выполняются быстрее всего (1-3 такта на операцию)
2.
Операции с float выполняются в 1.5-2 раза быстрее, чем с double на большинстве
современных процессоров
3.
Использование SIMD-инструкций (SSE, AVX) может ускорить операции с float в
4-8 раз. [6]
4.
Операции с long double могут быть в 5-10 раз медленнее, чем с double
Рисунок 2. Зависимость времени выполнения операций от типа данных
Точность вычислений
Анализ точности показал следующие результаты:
1.
При сложении 10⁶ чисел типа float может теряться до 6 десятичных знаков
точности. [6]
2.
Использование double позволяет значительно уменьшить потерю точности в
итеративных алгоритмах
3.
Особенно критична потеря точности при вычитании близких чисел и операциях с
плохо обусловленными матрицами.[2]
4.
Метод Кэхэна для суммирования массива чисел позволяет сохранить больше
значащих цифр. [2]
Таблица 2.
Потеря точности при суммировании N чисел типа float
Количество чисел (N)
Потеря точности (дес. знаки)
10
0
100
1
10 000
4
1 000 000
6
Оптимизация использования памяти
INTERNATIONAL JOURNAL OF SCIENTIFIC RESEARCHERS
ISSN: 3030-332X Impact factor: 8,293
Volume 12, issue 1, June 2025
https://wordlyknowledge.uz/index.php/IJSR
worldly knowledge
Index:
google scholar, research gate, research bib, zenodo, open aire.
https://scholar.google.com/scholar?hl=ru&as_sdt=0%2C5&q=wosjournals.com&btnG
https://www.researchgate.net/profile/Worldly-Knowledge
https://journalseeker.researchbib.com/view/issn/3030-332X
23
Анализ показал, что выбор типа данных существенно влияет на использование памяти:
1.
Замена double на float сокращает объём данных в 2 раза
2.
Использование short вместо int для небольших чисел экономит 50% памяти
3.
Оптимизация структур данных с учётом выравнивания может дать
дополнительный выигрыш
4.
В некоторых случаях выгодно хранить данные в compact-формате с
преобразованием при вычислениях
Компромисс между точностью и производительностью
Основной компромисс при выборе типа данных заключается между точностью
вычислений и производительностью/использованием памяти. Решение зависит от
конкретной задачи:
1.
Для графических и DSP-приложений часто достаточно float
2.
Научные вычисления обычно требуют double
3.
Финансовые расчёты могут требовать decimal-типов или целочисленной
арифметики
4.
В embedded-системах часто критичен размер данных, поэтому используют
минимально достаточную точность
Рекомендации по выбору типов данных
На основе проведённого исследования можно сформулировать следующие рекомендации:
1.
Для хранения больших массивов данных
предпочтительнее использовать float,
если точности достаточно. [6]
2.
Для промежуточных вычислений
стоит использовать double, особенно в
итеративных алгоритмах. [6]
3.
При работе с целыми числами
выбирать минимально достаточный диапазон
(short, int, long long).
4.
Избегать смешанных вычислений
(float/double, целые/плавающая точка).
5.
Для критичных к точности операций
использовать специализированные
алгоритмы (компенсированное суммирование и т.д.)
Пример оптимизации
Рассмотрим пример оптимизации вычисления суммы массива:
// Наивная реализация - проблемы с точностью для больших массивов
float sum_naive(const float* arr, size_t n) {
float sum = 0;
for (size_t i = 0; i < n; ++i)
sum += arr[i];
return sum;
}
// Оптимизированная версия с double для промежуточных вычислений
float sum_optimized(const float* arr, size_t n) {
double sum = 0;
for (size_t i = 0; i < n; ++i)
sum += arr[i];
return static_cast<float>(sum);
}
INTERNATIONAL JOURNAL OF SCIENTIFIC RESEARCHERS
ISSN: 3030-332X Impact factor: 8,293
Volume 12, issue 1, June 2025
https://wordlyknowledge.uz/index.php/IJSR
worldly knowledge
Index:
google scholar, research gate, research bib, zenodo, open aire.
https://scholar.google.com/scholar?hl=ru&as_sdt=0%2C5&q=wosjournals.com&btnG
https://www.researchgate.net/profile/Worldly-Knowledge
https://journalseeker.researchbib.com/view/issn/3030-332X
24
Вторая реализация сохраняет значительно большую точность при суммировании
больших массивов, практически не теряя в производительности. [6]
Проблемы воспроизводимости
Важной проблемой при работе с числами с плавающей точкой является
воспроизводимость результатов на разных платформах. Различия могут возникать из-за:
1.
Разных реализаций математических функций в библиотеках
2.
Разного порядка выполнения операций в параллельных вычислениях
3.
Различных режимов округления
4.
Использования расширенных регистров FPU
Для обеспечения воспроизводимости рекомендуется:
1.
Избегать зависимостей от порядка вычислений
2.
Использовать строгие модели вычислений (-ffp-contract=off в GCC)
3.
Ограничивать оптимизации, влияющие на точность
4.
Проводить тестирование на разных платформах
ВЫВОДЫ
Проведённое исследование показало, что выбор типов данных в C++ существенно влияет
как на производительность вычислений, так и на их точность. Основные выводы работы:
1.
Не существует универсального "лучшего" типа данных - выбор зависит от
конкретной задачи
2.
Компромисс между точностью и производительностью можно оптимизировать,
используя разные типы для хранения данных и промежуточных вычислений
3.
Потеря точности особенно критична в итеративных алгоритмах и при работе с
плохо обусловленными системами
4.
Правильный выбор типов данных может дать выигрыш как в скорости
выполнения, так и в использовании памяти
Для практического применения результатов исследования рекомендуется:
1.
Проводить анализ требуемой точности для каждой задачи
2.
Тестировать производительность с разными типами данных
3.
Использовать специализированные алгоритмы для критичных к точности
операций
4.
Документировать требования к точности в проектной документации
Дальнейшие исследования в этой области могут быть направлены на анализ влияния
новых типов данных (таких как float) и возможностей современных процессоров
(матричные расширения, тензорные ядра) на производительность и точность вычислений.
Использованная литература:
1. Goldberg, D. "What Every Computer Scientist Should Know About Floating-Point
Arithmetic". ACM Computing Surveys, 1991.
2. Нетай И. "О точности вычислений: как не потерять данные в цифровом шуме". Хабр,
2023.
3. "Типы данных и int в программировании". OTUS, 2022.
4. "Типы данных: что это такое и какие они бывают". Skyeng, 2021.
5. "Почему важно соблюдать точность вычислений в современных бизнес-процессах".
Yandex, 2023.
6. "Одинарная или двойная точность?". Хабр, 2016.
INTERNATIONAL JOURNAL OF SCIENTIFIC RESEARCHERS
ISSN: 3030-332X Impact factor: 8,293
Volume 12, issue 1, June 2025
https://wordlyknowledge.uz/index.php/IJSR
worldly knowledge
Index:
google scholar, research gate, research bib, zenodo, open aire.
https://scholar.google.com/scholar?hl=ru&as_sdt=0%2C5&q=wosjournals.com&btnG
https://www.researchgate.net/profile/Worldly-Knowledge
https://journalseeker.researchbib.com/view/issn/3030-332X
25
7. "Производительность Excel: повышение производительности вычислений". Microsoft,
2021.
8. "Анализ точности вычислений на ПК". dxdy.ru, 2014.