## Types of numbers

0
rational number Rational numbers are implemented by arbitrary precision integers (bignum). A rational number is always expressed by a fraction of lowest terms.
1
double precision floating point number (double float) The numbers of this type are numbers provided by the computer hardware. By default, when Asir is started, floating point numbers in a ordinary form are transformed into numbers of this type. However, they will be transformed into bigfloat numbers when the switch bigfloat is turned on (enabled) by ctrl() command.
[0] 1.2;
1.2
[1] 1.2e-1000;
0
[2] ctrl("bigfloat",1);
1
[3] 1.2e-1000;
1.20000000000000000513 E-1000
A rational number shall be converted automatically into a double float number before the operation with another double float number and the result shall be computed as a double float number.
2
algebraic number See section Algebraic numbers.
3
bigfloat The bigfloat numbers of Asir is realized by PARI library. A bigfloat number of PARI has an arbitrary precision mantissa part. However, its exponent part admits only an integer with a single word precision. Floating point operations will be performed all in bigfloat after activating the bigfloat switch by ctrl() command. The default precision is about 9 digits, which can be specified by setprec() command.
[0] ctrl("bigfloat",1);
1
[1] eval(2^(1/2));
1.414213562373095048763788073031
[2] setprec(100);
9
[3] eval(2^(1/2));
1.41421356237309504880168872420969807856967187537694807317654396116148
Function eval() evaluates numerically its argument as far as possible. Notice that the integer given for the argument of setprec() does not guarantee the accuracy of the result, but it indicates the representation size of numbers with which internal operations of PARI are performed. (section eval, See section pari)
4
complex number A complex number of Risa/Asir is a number with the form a+b*@i, where @i is the unit of imaginary number, and a and b are either a rational number, double float number or bigfloat number, respectively. The real part and the imaginary part of a complex number can be taken out by real() and imag() respectively.
5
element of a small finite prime field Here a small finite fieid means that its characteristic is less than 2^27. At present small finite fields are used mainly for groebner basis computation, and elements in such finite fields can be extracted by taking coefficients of distributed polynomials whose coefficients are in finite fields. Such an element itself does not have any information about the field to which the element belongs, and field operations are executed by using a prime p which is set by setmod().
6
element of large finite prime field This type expresses an element of a finite prime field whose characteristic is an arbitrary prime. An object of this type is obtained by applying simp_ff to an integer.
7
element of a finite field of characteristic 2 This type expresses an element of a finite field of characteristic 2. Let F be a finite field of characteristic 2. If [F:GF(2)] is equal to n, then F is expressed as F=GF(2)[t]/(f(t)), where f(t) is an irreducible polynomial over GF(2) of degree n. As an element g of GF(2)[t] can be expressed by a bit string, An element g mod f in F can be expressed by two bit strings representing g and f respectively. Several methods to input an element of F are provided.
• @ @ represents t mod f in F=GF(2)[t](f(t)). By using @ one can input an element of F. For example @^10+@+1 represents an element of F.
• ptogf2n ptogf2n converts a univariate polynomial into an element of F.
• ntogf2n As a bit string, a non-negative integer can be regarded as an element of F. Note that one can input a non-negative integer in decimal, hexadecimal (0x prefix) and binary (0b prefix) formats.
• micellaneous simp_ff is available if one wants to convert the whole coefficients of a polynomial.

The characteristic of a large finite prime field and the defining polynomial of a finite field of characteristic 2 are set by setmod_ff. Elements of finite fields do not have informations about the modulus. Upon an arithmetic operation, the modulus set by setmod_ff is used. If one of the operands is a rational number, it is automatically converted into an element of the finite field currently set and the operation is done in the finite field.