Skip to content

Il1aIvanov/DECIMAL.H

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

DECIMAL.H

Реализация собственной библиотеки s21_decimal.h.

Арифметические операторы

Название оператора Оператор Функция
Сложение + int s21_add(s21_decimal value_1, s21_decimal value_2, s21_decimal *result)
Вычитание - int s21_sub(s21_decimal value_1, s21_decimal value_2, s21_decimal *result)
Умножение * int s21_mul(s21_decimal value_1, s21_decimal value_2, s21_decimal *result)
Деление / int s21_div(s21_decimal value_1, s21_decimal value_2, s21_decimal *result)

Функции возвращают код ошибки:

  • 0 - OK
  • 1 - число слишком велико или равно бесконечности
  • 2 - число слишком мало или равно отрицательной бесконечности
  • 3 - деление на 0

Уточнение про числа, не вмещающиеся в мантиссу:

  • При получении чисел, не вмещающихся в мантиссу при арифметических операциях, использовать банковское округление (например, 79,228,162,514,264,337,593,543,950,335 - 0.6 = 79,228,162,514,264,337,593,543,950,334)

Операторы сравнение

Название оператора Оператор Функция
Меньше < int s21_is_less(s21_decimal, s21_decimal)
Меньше или равно <= int s21_is_less_or_equal(s21_decimal, s21_decimal)
Больше > int s21_is_greater(s21_decimal, s21_decimal)
Больше или равно >= int s21_is_greater_or_equal(s21_decimal, s21_decimal)
Равно == int s21_is_equal(s21_decimal, s21_decimal)
Не равно != int s21_is_not_equal(s21_decimal, s21_decimal)

Возвращаемое значение:

  • 0 - FALSE
  • 1 - TRUE

Преобразователи

Преобразователь Функция
Из int int s21_from_int_to_decimal(int src, s21_decimal *dst)
Из float int s21_from_float_to_decimal(float src, s21_decimal *dst)
В int int s21_from_decimal_to_int(s21_decimal src, int *dst)
В float int s21_from_decimal_to_float(s21_decimal src, float *dst)

Возвращаемое значение - код ошибки:

  • 0 - OK
  • 1 - ошибка конвертации

Уточнение про преобразование числа типа float:

  • Если числа слишком малы (0 < |x| < 1e-28), вернуть ошибку и значение, равное 0
  • Если числа слишком велики (|x| > 79,228,162,514,264,337,593,543,950,335) или равны бесконечности, вернуть ошибку
  • При обработке числа с типом float преобразовывать все содержащиеся в нём значимые десятичные цифры. Если таких цифр больше 7, то значение числа округляется к ближайшему, у которого не больше 7 значимых цифр.

Уточнение про преобразование из числа типа decimal в тип int:

  • Если в числе типа decimal есть дробная часть, то её следует отбросить (например, 0.9 преобразуется 0)

Другие функции

Описание Функция
Округляет указанное Decimal число до ближайшего целого числа в сторону отрицательной бесконечности. int s21_floor(s21_decimal value, s21_decimal *result)
Округляет Decimal до ближайшего целого числа. int s21_round(s21_decimal value, s21_decimal *result)
Возвращает целые цифры указанного Decimal числа; любые дробные цифры отбрасываются, включая конечные нули. int s21_truncate(s21_decimal value, s21_decimal *result)
Возвращает результат умножения указанного Decimal на -1. int s21_negate(s21_decimal value, s21_decimal *result)

Возвращаемое значение - код ошибки:

  • 0 - OK
  • 1 - ошибка вычисления

Реализация функции библиотеки decimal.h

  • Библиотека должна быть разработана на языке Си стандарта C11 с использованием компиятора gcc
  • Оформить решение как статическую библиотеку (с заголовочным файлом s21_decimal.h)
  • Библиотека должна быть разработана в соответствии с принципами структурного программирования
  • Подготовить полное покрытие unit-тестами функций библиотеки c помощью библиотеки Check
  • Предусмотреть Makefile для сборки библиотеки и тестов (с целями all, clean, test, s21_decimal.a, gcov_report)
  • В цели gcov_report должен формироваться отчёт gcov в виде html страницы. Для этого unit-тесты должны запускаться с флагами gcov
  • Запрещено использование типа __int128
  • Конечные нули можно как оставлять, так и удалять (за исключением функции s21_truncate)
  • Определяемый тип должен поддерживать числа от -79,228,162,514,264,337,593,543,950,335 до +79,228,162,514,264,337,593,543,950,335.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published