- •Flint/c
- •Если обнаруживается переполнение или потеря значимости, арж метическая функция возвращает соответствующий код ошибки
- •E clint ufl Потеря значимости
- •1. Операции ввода, вывода и преобразования больших чисел
- •1.2 Преобразование переменных типа clint в базовые типы
- •1.3 Дополнительные операции с cLlNt-объектами
- •1.4Основные арифметические операции с большими числами типа clint
1.2 Преобразование переменных типа clint в базовые типы
Преобразование CLINT-объекта в строку символов
Синтаксис: char * xclint2str_l (CLINT n_l, USHORT base, int base);
Вход: _ n l (преобразуемый CLlNT-объект)
Возврат:
base (основание численного представления искомой строки)
showbase (значение * 0: численное представление имеет префикс
«Ох» для base = 16 или «0B» для base = 2.
Значение = 0: префикса нет).
указатель на полученную строку символов, если все в порядке NULL - если 2 < base или base > 16
Преобразование CLINT-объекта в байтовый вектор
Синтаксис: UCHAR * clin(2byte_l (CLINT n_l, int *ton);
Вход: nj (преобразуемый CLINT-объект)
len (длина генерируемого байтового вектора)
Возврат:
указатель на полученный байтовый вектор NULL, если в len передан пустой указатель
1.3 Дополнительные операции с cLlNt-объектами
Копирование CLINT
Синтаксис: void cpy_l (CLINT des, CLINT src);
Вход: src (присваиваемое значение)
Выход: des (объект назначения)
Перестановка значений двух CLlNT-объектов
Синтаксис: void fswap_l (CLINT a, CLINT b);
Вход: a, b (переставляемые значения)
Выход: a, b
Число значащих двоичных разрядов CLINT-объекта
Синтаксис: unsigned int ld_l (CLINT a);
Вход: a (операнд)
Выход: Число значащих двоичных разрядов числа а
1.4Основные арифметические операции с большими числами типа clint
Функции сложения
Сложение
Синтаксис: int add_l (CLINT a, CLINT b, CLINT с);
Вход: a, b (слагаемые)
Выход: с (сумма)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
Инкремент (увеличение CLINT-обьекта на 1)
Синтаксис: int inc_l (CLINT a);
Вход: а (слагаемое)
Выход: a (сумма)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
Смешанное сложение переменных типа CLINT и USHORT
Синтаксис: int uadd_l (CLINT a, USHORT b, CLINT c);
Вход: a, b (слагаемые)
Выход: c (сумма)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
Функции вычитания
Вычитание
Синтаксис int sub_l (CLINT a, CLINT b, CLINT с);
Вход: a (уменьшаемое),b (вычитаемое)
Выход: с (разность)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_UFL в случае потери значащих разрядов
Декремент (уменьшение CLINT-обьекта на 1)
Синтаксис: int dec_l (CLINT a);
Вход: а (уменьшаемое )
Выход: a (разность сумма)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_UFL в случае потри значащих разрядов
Вычитание числа типа USHORT из числа типа CLINT
Синтаксис: int usub_l (CLINT a, USHORT b, CLINT c);
Вход: a (уменьшаемое), b (вычитаемое)
Выход: c (разность)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_UFL в случае потери значащих разрядов
Функции умножения
Умножение
Синтаксис: int mul_l (CLINT a, CUNT b, CLINT c);
Вход: a, b (сомножители)
Выход: c(произведение)
Возврат: E_CLINT_OK, если все в порядке
E_CLlNT_OFL в случае переполнения
Возведение в квадрат
Синтаксис: inl sqr_l (CLINT a, CLINT c);
Вход: a (операнд)
Выход: c (квадрат)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
Умножение CLINT- объекта на число типа USHORT
Синтаксис: inl umul_l (CLINT a, USHORT b, CLINT c);
Вход: a, b (сомножители)
Выход: c (произведение)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
Функции деления
Деление
Синтаксис: inl div_l (CLINT a, CLINT b, CLINT q, CLINT tem);
Вход: a (делимое), b (делитель)
Выход: q (частное), tem (остаток)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_DBZ в случае деления на 0
Деление переменной типа CLINT на переменную типа USHORT
Синтаксис: int udiv_l (CLINT a, USHORT b, CLINT q,CLINT r);
Вход: a (делимое), b (делитель)
Выход: q (частное), r (остаток)
Возврат: E_CLINT_OK, если все в порядке E_CLINT_DBZ в случае деления на 0
Функции модульного деления
Модульное деление ( вычет по модулю )
Синтаксис: int mod_l (CLINT a, CLINT b, CLINT r);
Вход: a (делимое), b (делитель или модуль)
Выход: r (остаток)
Возврат: E_CLINT_OK, если все в порядке E_CLINT_D8Z в случае деления на 0
Модульное деление на степень двойки (вычет по модулю 2k)
Синтаксис: int mod2_l (CLINT a, ULONG b, CLINT r);
Вход: a (делимое),b (показатель степени делителя или модуля)
Выход: r (остаток)
Модульное деление переменной типа CLINT на переменную типа USHORT( вычет по модулю )
Синтаксис: USHORT umod_l (CLINT a, USHORT b);
Вход: a (делимое), b (делитель или модуль)
Возврат: неотрицательный остаток, если все в порядке 0xFFFF в случае деления на 0
Пример использования основных арифметических операций
#pragma hdrstop
#include <FLINT.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define ClintToStr xclint2str_l // Переопределение функции xclint2str_l
int main(int argc, char* argv[])
{
CLINT a,b,c; // Обьявление объектов CLINT
// Инициализаация объектов CLINT строкой 16-х цифр
char *sa =new char;sa="104576356756674567845764567456757645778467837638";
str2clint_l (a,sa,10);//Инициализация строкой
char *sb =new char;sb="1814595567567567567567635673567567567567876867897";
str2clint_l (b,sb,10);//Инициализация строкой
printf("a=%s\n",ClintToStr(a,10,1));
printf("b=%s\n",ClintToStr(b,10,1));
//Сложение
int Err= add_l (a,b,c);
printf("Err= %d c=a+b= %s\n",Err,ClintToStr(c,10,1));
// Инкремент
Err= inc_l ( a);
printf("Err= %d a=a+1= %s\n",Err,ClintToStr(a,10,1));
// Смешанное сложение переменных типа CLINT и USHORT
USHORT US=1956; printf("US= %d\n",US);
Err= uadd_l ( a,US, c);
printf("Err= %d a+US= %s\n",Err,ClintToStr(c,10,1));
//Вычитание
Err= sub_l (b,a,c);
printf("Err= %d c=b-a= %s\n",Err,ClintToStr(c,10,1));
// Денкремент
Err= dec_l ( c);
printf("Err= %d c=c-1= %s\n",Err,ClintToStr(c,10,1));
//Вычитание числа типа USHORT из числа типа CLINT
Err= usub_l ( c, US, a);
printf("Err= %d a=c-US= %s\n",Err,ClintToStr(a,10,1));
//Yмножение
Err= mul_l ( a, b, c);
printf("Err= %d c=a*b= %s\n",Err,ClintToStr(c,10,1));
// Возведение в квадрат числа a
Err= sqr_l ( a, c);
printf("Err= %d b=sql(a)= %s\n",Err,ClintToStr(b,10,1));
// Умножение CLINT- объекта на число типа USHORT
Err=umul_l (a, US, c);
printf("Err= %d c=a*US= %s\n",Err,ClintToStr(c,10,1));
//Деление
CLINT q, tem;
Err= div_l (b, a, q, tem );
printf("Err= %d q=b/a= %s\n",Err,ClintToStr(q,10,1));
printf(" tem= %s\n",ClintToStr(tem,10,1));
// Модульное деление ( вычет по модулю )
mod_l (b, a, tem);
printf(" Err= %d tem=b mod a= %s\n",Err,ClintToStr(tem,10,1));
// Модульное деление на степень двойки (вычет по модулю 2k)
Err= mod2_l ( a, 5, q);
printf(" Err= %d q=a mod (2*2*2*2*2) = %s\n",Err,ClintToStr(q,10,1));
//Модульное деление переменной типа CLINT на переменную типа USHORT
//( вычет по модулю )
US=pow(2,5) ;
USHORT F= umod_l (a, US);
printf(" F=a mod (2*2*2*2*2) = %d\n",F);
getch();
return 0; }
Рисунок Основные арифметические операции
Задание
№ п.п |
Инициализация |
Преобразование переменных , дополнительные операции |
Арифметические операции |
Поразрядные операции
|
1 |
Строкой 16-х цифр |
Перестановка значений двух CLlNT-объектов |
Сложение, деление , модульное деление на степень двойки |
Сдвиг влево на один бит |
2 |
Числом типа ULONG |
Копирование CLINT
|
Смешанное сложение, возведение в квадрат, умножение |
Сдвиг вправо на один бит |
3 |
Вектором байт |
Перестановка значений двух CLlNT-объектов |
Инкремент, модульное деление на степень двойки, вычитание числа типа USHORT из числа типа CLINT |
Поразрядное “И”
|
4 |
Строкой 2-х цифр |
Преобр. CLINT-объекта в строку символов |
Вычитание,деление, модульное деление переменной типа CLINTна переменную типаUSHORT |
Поразрядное “ИЛИ”
|
5 |
Строкой 8-х цифр |
Перестановка значений двух CLlNT-объектов |
Смешанное сложение переменных типа CLINT и USHORT, умножение, декремент |
Поразрядное “исключающее ИЛИ”
|
6 |
Строкой 10-х цифр |
Преобр. CLINT-объекта в строку символов |
Вычитание числа типа USHORT из числа типа CLINT, деление переменной типа CLINT на переменную типа USHORT, вычитание |
Проверка и задание значения бита
|
7 |
Строкой 2-х цифр |
Перестановка значений двух CLlNT-объектов |
Сложение, умножение, модульное деление |
Проверка и обнуление значения бита
|
8 |
Числом типа ULONG |
Копирование CLINT
|
Инкремент,деление, возведение в квадрат
|
Сдвиг влево на один бит |
9 |
Строкой 8-х цифр |
Копирование CLINT
|
Умножение CLINT- объекта на число типаUSHORT, возведение в квадрат, модульное деление переменной типа CLINTна переменную типаUSHORT |
Сдвиг вправо на один бит |
10 |
Строкой 16-х цифр |
Перестановка значений двух CLlNT-объектов
|
Сложение, деление, модульное деление, деление переменной типа CLINT на переменную типа USHORT |
Поразрядное “И”
|
11 |
Вектором байт |
Копирование CLINT |
возведение в квадрат, модульное деление на степень двойки
|
Поразрядное “ИЛИ”
|
12 |
Строкой 2-х цифр |
Число значащих двоичных разрядов CLINT-объекта |
Умножение, декремент, модульное деление |
Проверка двоичного разряда
|
13 |
Строкой 10-х цифр |
Копирование CLINT
|
Смешанное сложение переменных типа CLINT и USHORT, умножение CLINT- объекта на число типаUSHORT, модульное деление на степень двойки |
Поразрядное “И”
|
14 |
Строкой 16-х цифр |
Преобр. CLINT-объекта в строку символов |
Вычитание, умножение, модульное деление |
Проверка и задание значения бита
|
15 |
Числом типа ULONG |
Перестановка значений двух CLlNT-объектов |
Инкремент, деление, декремент |
Поразрядное “ИЛИ”
|
16 |
Строкой 8-х цифр |
Копирование CLINT
|
Сложение, умножение, модульное деление переменной типа CLINT на переменную типа USHORT |
Сдвиг влево на один бит |
17 |
Строкой 2-х цифр |
Число значащих двоичных разрядов CLINT-объекта |
Вычитание числа типа USHORT из числа типа CLINT, декремент, умножение |
Сдвиг вправо на один бит |
18 |
Строкой 10-х цифр |
Перестановка значений двух CLlNT-объектов |
Сложение, , модульное деление, смешанное сложение переменных типа CLINT и USHORT
|
Поразрядное “исключающее ИЛИ”
|
19 |
Числом типа ULONG |
Копирование CLINT
|
Вычитание, декремент,умножение |
Проверка и задание значения бита
|
20 |
Вектором байт |
Преобр. CLINT-объекта в байтовый вектор
|
Сложение, возведение в квадрат, модульное деление переменной типа CLINT на переменную типа USHORT
|
Проверка и обнуление значения бита
|
Отчет должен содержать содержать:
1. Hаименование и номер лабораторной работы;
2. Условие задачи;
3. Распечатка листинга программы;
4. Распечатка результатов выполнения задачи;
5. Выводы по результатам выполнения задач, анализ возможностей библиотеки “FLINT\C” .