Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
#include "pari.h"12GEN gen_0, gen_1, gen_m1, gen_2, gen_m2;3THREAD pari_sp avma;4THREAD size_t memused = 0;5ulong DEBUGLEVEL,DEBUGMEM = 0;6const double LOG10_2 = 0.;7const long lontyp[] = {0};8THREAD VOLATILE int PARI_SIGINT_block, PARI_SIGINT_pending;9struct pari_mainstack * pari_mainstack;10long *varpriority;1112void mt_sigint_block(void) { }13void mt_sigint_unblock(void) { }14void new_chunk_resize(size_t x) {(void)x;}1516void specinit()17{18long size = 100000L;19pari_mainstack = malloc(sizeof(*pari_mainstack));20pari_mainstack->size = size;21pari_mainstack->bot = (pari_sp)malloc(size);22pari_mainstack->top = avma = pari_mainstack->bot + size;23gen_0 = cgeti(2); affui(0, gen_0);24gen_1 = utoipos(1);25gen_m1= utoineg(1);26gen_2 = utoipos(2);27gen_m2= utoineg(2);28}2930void sorstring(ulong x)31{32#ifdef LONG_IS_64BIT33if (x>>32) printf("%08lx ", x>>32);34printf("%08lx ", x & 0xFFFFFFFF);35#else36printf("%08lx ", x);37#endif38}3940void _voiri(GEN x)41{42long i, lx = lgefint(x);43GEN y = int_MSW(x);44printf("signe: %ld, ",signe(x));45for (i=2; i < lx; i++, y = int_precW(y)) sorstring(*y);46printf("\n");47}48void _voirr(GEN x)49{50long i, lx = lg(x);51printf("signe: %ld, expo: %ld, ",signe(x),expo(x));52for (i=2; i < lx; i++) sorstring(x[i]);53printf("\n");54}5556int main()57{58GEN x,y,r,z, xr,yr;59specinit();60x = utoipos(187654321UL);61y = utoineg(12345678UL);62printf("INT: %ld\n", itos(x));63printf("conv:"); _voiri(x);64printf("+:"); _voiri(addii(x,y));65printf("-:"); _voiri(subii(x,y));66printf("*:"); _voiri(mulii(x,y));67printf("/:"); _voiri(dvmdii(x,y, &z));68printf("rem:"); _voiri(z);69printf("pow:\n");70z = mulii(x,x); _voiri(z);71z = mulii(z,z); _voiri(z);72z = mulii(z,z); _voiri(z);73z = mulii(z,z); _voiri(z);74z = mulii(z,z); _voiri(z);75printf("invmod:"); invmod(y,z,&r); _voiri(r);76xr = itor(x, DEFAULTPREC);77yr = itor(y, DEFAULTPREC);78printf("\nREAL: %f\n", rtodbl(xr));79printf("conv1:"); _voirr(xr);80printf("conv2:"); _voirr(dbltor(rtodbl(xr)));81printf("+:"); _voirr(addrr(xr,yr));82printf("-:"); _voirr(subrr(xr,yr));83printf("*:"); _voirr(mulrr(xr,yr));84printf("/:"); _voirr(divrr(xr,yr));85printf("gcc bug?:"); _voirr(divru(dbltor(3.),2));86return 0;87}888990