Еще одна возможность генерировать интерфейс C - Octave - использовать SWIG , который может генерировать один файл .oct со всеми вашими функциями. См. здесь при использовании указателей и массивов.
Вот пример:
header
/* File: example.h */
int fact(int n);
int fact2(int n1, int n2);
void add(int *x, int *y, int *r);
source
/* File: example.c */
#include "example.h"
int fact(int n) {
if (n < 0){ /* This should probably return an error, but this is simpler */
return 0;
}
if (n == 0) {
return 1;
}
else {
/* testing for overflow would be a good idea here */
return n * fact(n-1);
}
}
int fact2(int n1, int n2) {
return fact(n1)*fact(n2);
}
void add(int *x, int *y, int *r) {
*r = *x + *y;
}
interface
/* File example.i */
%module swigexample
%include "cpointer.i"
%{
#include "example.h"
%}
%pointer_functions(int, intp)
%include "example.h"
compile
[113 ]
тест
% File test.m
swigexample;
fact(5)
fact2(4,4)
% ==============
a = new_intp();
intp_assign(a, 37);
b = new_intp();
intp_assign(b, 22);
c = new_intp();
add(a,b,c);
r = intp_value(c);
delete_intp(a);
delete_intp(b);
delete_intp(c);
r
Что за вопрос? Вы переполнены. Используйте bigint, если вам нужны такие большие числа.
http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html
Обратите внимание на диапазон допустимых значений для целочисленного типа в http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html . Я думаю, что вам придется использовать bigint, десятичную или двойную точность.
Целые числа PostgreSQL подписаны, нет типа данных без знака - я уверен, что это ваша проблема.
Если вам нужны большие значения, используйте bigint. Если bigint тоже недостаточно, используйте числовые, но используйте bigint, а не числовые, если вам не нужен больший размер или десятичные дроби, так как это намного быстрее.