39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef QEXT_H
 | 
						|
#define QEXT_H
 | 
						|
 | 
						|
#include <gmp.h>
 | 
						|
 | 
						|
struct qext_type {
 | 
						|
	int rank;
 | 
						|
	const int *integer_coeffs;  // actually the rank+1 coefficients of the polynomial
 | 
						|
	mpq_t *coeffs;  // components of a^rank
 | 
						|
};
 | 
						|
 | 
						|
struct qext_number_internal {
 | 
						|
	struct qext_type *type;
 | 
						|
	mpq_t *a;
 | 
						|
};
 | 
						|
 | 
						|
typedef struct qext_number_internal qext_number[1];
 | 
						|
 | 
						|
extern struct qext_type *QT_TRIVIAL;
 | 
						|
extern struct qext_type *QT_SQRT5;
 | 
						|
extern struct qext_type *QT_GAUSS_SQRT5;
 | 
						|
 | 
						|
void qext_init(qext_number x, struct qext_type *type);
 | 
						|
void qext_clear(qext_number x);
 | 
						|
void qext_set(qext_number x, qext_number y);
 | 
						|
void qext_set_int(qext_number x, int y);
 | 
						|
void qext_set_q(qext_number x, mpq_t y);
 | 
						|
void qext_add(qext_number result, qext_number x, qext_number y);
 | 
						|
void qext_sub(qext_number result, qext_number x, qext_number y);
 | 
						|
void qext_neg(qext_number result, qext_number x);
 | 
						|
void qext_mul(qext_number out, qext_number x, qext_number y);
 | 
						|
void qext_inv(qext_number out, qext_number in);
 | 
						|
void qext_div(qext_number out, qext_number x, qext_number y);
 | 
						|
int qext_cmp(qext_number x, qext_number y);
 | 
						|
void qext_print(qext_number x);
 | 
						|
void qext_snprint(char *str, size_t len, qext_number x);
 | 
						|
 | 
						|
#endif
 |