Авторы

  • Ибрагимов Шавкат Мамирович
    Ферганский государственный университет, факультет физики - математики, старший преподаватель кафедры информационные технологии.

DOI:

https://doi.org/10.71337/inlibrary.uz.ijsr.129878

Ключевые слова:

C типы данных производительность точность вычислений оптимизация числа с плавающей точкой целочисленные типы

Аннотация

В данной статье исследуется влияние выбора типов данных на производительность и точность вычислений в языке программирования C++. Рассматриваются основные типы данных, их характеристики, области применения и компромиссы между точностью и скоростью выполнения операций. Приводятся практические рекомендации по выбору оптимальных типов данных для различных сценариев вычислений. Статья содержит сравнительный анализ производительности, примеры потери точности и методы её сохранения, а также рекомендации по оптимизации кода с учётом особенностей работы с числами с плавающей точкой и целочисленными типами.

 


background image

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++

Ибрагимов Шавкат Мамирович

Ферганский государственный университет, факультет физики - математики,

старший преподаватель кафедры информационные технологии.

shavkat70@bk.ru

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.

Переполнению и неожиданным результатам вычислений


background image

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.

Сравнение результатов с эталонными значениями


background image

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)

На графике:

Бирюзовые столбцы — размер в байтах.

Оранжевые — точность (количество десятичных знаков).

Красные — скорость операций (чем выше столбец, тем быстрее операции).

График позволяет быстро оценить, как с увеличением точности и размера данных

снижается скорость вычислений.

Производительность операций


background image

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

Оптимизация использования памяти


background image

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);

}


background image

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.


background image

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.

Библиографические ссылки

Goldberg, D. "What Every Computer Scientist Should Know About Floating-Point Arithmetic". ACM Computing Surveys, 1991.

Нетай И. "О точности вычислений: как не потерять данные в цифровом шуме". Хабр, 2023.

"Типы данных и int в программировании". OTUS, 2022.

"Типы данных: что это такое и какие они бывают". Skyeng, 2021.

"Почему важно соблюдать точность вычислений в современных бизнес-процессах". Yandex, 2023.

"Одинарная или двойная точность?". Хабр, 2016.

"Производительность Excel: повышение производительности вычислений". Microsoft, 2021.

"Анализ точности вычислений на ПК". dxdy.ru, 2014.