Реализация собственной библиотеки 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 - ошибка вычисления
- Библиотека должна быть разработана на языке Си стандарта 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.