This commit is contained in:
PanSi21 2025-01-05 00:30:17 +01:00
parent 0b13972f36
commit bd0893c21f
Signed by untrusted user who does not match committer: PanSi21
GPG key ID: 755F8874C65EF462
4 changed files with 100 additions and 35 deletions

View file

@ -1,39 +1,14 @@
import { cc } from "bun:ffi";
import source from "./test.c" with { type: "file" };
import { dlopen, FFIType, suffix } from "bun:ffi";
const path = `./libfibonacci.so`;
const {
symbols: { fibonacci },
} = cc({
source,
symbols: {
fibonacci: {
const { symbols } = dlopen(path, {
fibonacci_gmp: {
args: [],
returns: "uint64_t",
},
returns: FFIType.cstring,
},
});
const risultato = fibonacci();
const result = symbols.fibonacci_gmp();
console.log("Fibonacci(25000) =", result);
console.log("fibonacci serie 250 000: ", risultato );
//
function fibonacci_js() {
const n = 250000;
let a = 0n;
let b = 1n;
let c;
for (let i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
const result_js = fibonacci_js();
console.log("Fibonacci(250 000) =", result_js.toString());

63
index.js.backup Normal file
View file

@ -0,0 +1,63 @@
import { cc } from "bun:ffi";
import source from "./test.c" with { type: "file" };
const {
symbols: { fibonacci },
} = cc({
source,
symbols: {
fibonacci: {
args: [],
returns: "uint64_t",
},
},
});
const risultato = fibonacci();
console.log("fibonacci serie 25 000: ", risultato );
const {
symbols: { fibonacci_gmp },
} = cc({
source,
symbols: {
fibonacci_gmp: {
args: [],
returns: "cstring",
},
},
});
const result_gmp = fibonacci_gmp();
console.log("Fibonacci(25000) =", result_gmp);
//
function fibonacci_js() {
const n = 25000;
let a = 0n;
let b = 1n;
let c;
for (let i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
const result_js = fibonacci_js();
console.log("Fibonacci(25 000) =", result_js.toString());

BIN
libfibonacci.so Executable file

Binary file not shown.

29
test.c
View file

@ -1,7 +1,8 @@
#include <stdint.h>
#include <gmp.h>
uint64_t fibonacci( void ) {
const int n = 250000;
const int n = 25000;
uint64_t a = 0, b = 1, c;
for (int i = 2; i <= n; i++) {
@ -12,3 +13,29 @@ uint64_t fibonacci( void ) {
return b;
}
char* fibonacci_gmp() {
const int n = 25000;
static char result[10000]; // Assicurati che sia abbastanza grande per contenere il numero
mpz_t a, b, c;
mpz_init_set_ui(a, 0);
mpz_init_set_ui(b, 1);
mpz_init(c);
for (int i = 2; i <= n; i++) {
mpz_add(c, a, b);
mpz_set(a, b);
mpz_set(b, c);
}
mpz_get_str(result, 10, b);
mpz_clear(a);
mpz_clear(b);
mpz_clear(c);
return result;
}