[P&AM Lab] ��������� ������� �����

Grigoriy A. Sitkarev sitkarev �� komitex.ru
�� ��� 22 00:08:32 MSK 2011


������� ������.

 > ����� ������ ���������� ������� �����. ��������� ��������� ��������� �
 > ������������ ���� �� ���� ��� ������ ������ �������� � ����� ������� 
������ �
 > ��� ����. ���� ������� ������ ��������, ����������� �ݣ ���������, 
���������,
 > �������, ������� �� �������.

���������� ��� � ������ ������� API -- �.�. ��������� ������, ����� 
�������, �� ������� � ���������� � ������������ ��������. ��� ���� ����� 
API ��� ������� ����� ����� �� ���:

�) ���������;
�) ����������������;
�) ������� ��� �����������;
�) �������������� ������� ���������� � ��������� ������������;
�) ����������� �� ����������� ��������� � ������� (���� ������� 
��������� � ���������� � ��������).

��������, ������� ����� ����������� ������ -- ����� ����� ����� 
����������? ��� �� �� �ţ ����� � ��� �� ����� ţ ������������? ��� 
����� ����� ����������� �� �����-�� ����� � ���������-��������������� 
������� � ������� ţ, ���� �� ������������. �� ���� ���� �� ������ ޣ��� 
��������������, ����� ������� �� ����� �������� �� ����������. �� ������ 
-- ������� ������� ���� �������� � ���� ����������� ��� ���������������.

������ ��������������� API, �.�. ��������� � ���� ��������, �� �����, 
������� ���������� ����������, ��������� ���������, ������������ � �.�. 
�������� ������� ����������. ��������, � ���� ���������� ��������� 
������� ��������� ��� ���-�� ����� ��������������� �� ����� �� �����, 
����� ������ ����������� �ݣ ���, �� ������. ��������, �����-�� ��� 
������������. �������� ��������� �������-�� ���, ��� ����������. �� ��� 
���������� �� ���� ���� -- ��������� � ������������ ����.

 > ����� �� ������ ���-�� �ݣ? ���� �� ����� �������
 > ������������� �����? ����� �� ������ ������� ���, ��� �� ��� ����� �����
 > ���������� ������ �� ������� �����?

����� ������� ��� ����� ������� ����� ����������� (� �ݣ ����� ������):

bnum_new()
bnum_free()
bnum_unset()
bnum_reset()

bnum_add()
bnum_sub()
bnum_mul()
bnum_div()
bnum_mod()
bnum_gcd()
bnum_exp() ��� bnum_pow()
bnum_set()
bnum_set_int()
bnum_set_ascii()
bnum_get_ascii()

���-�� �����... ���� �������� �ݣ �������. ��� ����� ������ ���.

���� ��������, � ���� ��� ������������� ����� a � b, � ��� ���� a < b, � 
����� ������� �� (a - b), �� ����������� ����� ������������� �����. ��� 
����� �� ������ �� ������������� ������. ����� ���������� ����� ������. 
��� �������� ����� ���� ���������� ������ ����.

���� ��� ����� ������ ����� ����� ������� 65536 � ����� �������� 
�������� ������� � unsigned short. ����� bignum ����� ���� ������� 
�������, ������� ���������� � ������ ������ �������� ����� � ������� 
������� �������. ������� ����� ������� ���� ��� ���� ������ ������� 
���������� ���������������. ������ ������� ������ ��� � ����� ������ �� 
�� ����� �������� � ���������� �������� ���� � �����. ��������, 
65535^0=1 ���� top ����� 0.

#define BNUM_BASE	65536

struct bignum {
	int		sign;	/* 1 = negative, 0 = positive */
	int		nalloc;	/* allocated */
	int		top;	/* last used */
	unsigned short	*val;	/* BNUM_BASE digits */
};

���-�� ����� ������.

��������� ������ ������������ �� ��������� � �� �� ��������. ������ ��� 
� ���� ���������� � ����. ������ ���� ���-�� �����:

/* res = a + b */
int bnum_add(struct bignum *res, struct bignum *a, struct bignum *b);

����, ������ �������� ���������� �� �����. � ���� � ���� ���� ��������. 
����� ���� � ���� �����-�� �������� ������������, �� ���� ���� 
����������� ������ ������?

--
�.�.




��������� ���������� � ������ �������� Lab