DLL
This commit is contained in:
parent
0b13972f36
commit
bd0893c21f
4 changed files with 100 additions and 35 deletions
41
index.js
41
index.js
|
|
@ -1,39 +1,14 @@
|
||||||
import { cc } from "bun:ffi";
|
import { dlopen, FFIType, suffix } from "bun:ffi";
|
||||||
import source from "./test.c" with { type: "file" };
|
|
||||||
|
|
||||||
|
const path = `./libfibonacci.so`;
|
||||||
|
|
||||||
const {
|
const { symbols } = dlopen(path, {
|
||||||
symbols: { fibonacci },
|
fibonacci_gmp: {
|
||||||
} = cc({
|
args: [],
|
||||||
source,
|
returns: FFIType.cstring,
|
||||||
symbols: {
|
|
||||||
fibonacci: {
|
|
||||||
args: [],
|
|
||||||
returns: "uint64_t",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
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
63
index.js.backup
Normal 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
BIN
libfibonacci.so
Executable file
Binary file not shown.
29
test.c
29
test.c
|
|
@ -1,7 +1,8 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <gmp.h>
|
||||||
|
|
||||||
uint64_t fibonacci( void ) {
|
uint64_t fibonacci( void ) {
|
||||||
const int n = 250000;
|
const int n = 25000;
|
||||||
uint64_t a = 0, b = 1, c;
|
uint64_t a = 0, b = 1, c;
|
||||||
|
|
||||||
for (int i = 2; i <= n; i++) {
|
for (int i = 2; i <= n; i++) {
|
||||||
|
|
@ -12,3 +13,29 @@ uint64_t fibonacci( void ) {
|
||||||
|
|
||||||
return b;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue