diff --git a/index.js b/index.js index 433cdb3..ade04b8 100644 --- a/index.js +++ b/index.js @@ -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: { - args: [], - returns: "uint64_t", - }, +const { symbols } = dlopen(path, { + fibonacci_gmp: { + args: [], + 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()); diff --git a/index.js.backup b/index.js.backup new file mode 100644 index 0000000..0199399 --- /dev/null +++ b/index.js.backup @@ -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()); diff --git a/libfibonacci.so b/libfibonacci.so new file mode 100755 index 0000000..525c72c Binary files /dev/null and b/libfibonacci.so differ diff --git a/test.c b/test.c index 096876a..4682846 100644 --- a/test.c +++ b/test.c @@ -1,7 +1,8 @@ #include +#include 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++) { @@ -11,4 +12,30 @@ uint64_t fibonacci( void ) { } return b; -} \ No newline at end of file +} + + +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; +} +