If you are counting the informal license "Distribute like mad!" as a making it "public domain". First, that depends on jurisdiction. But! The README in the zipfile says it is proprietary (for personal use only.)
On Thu, 10 Dec 2015 10:17:04 -0800 Louis Santillan <lpsan...@gmail.com> wrote: > On Thu, Dec 10, 2015 at 7:30 AM, FRIGN <d...@frign.de> > wrote: > > > > On Wed, 9 Dec 2015 23:44:11 -0800 > > Louis Santillan <lpsan...@gmail.com> wrote: > > > > > Are libtommath [0]/tomsfastmath [1] not suckless? > > > > > > [0] https://github.com/libtom/libtommath > > > [1] https://github.com/libtom/tomsfastmath > > > > too complex for my tastes, but don't get me wrong. I > > know that for numerical perfection, you have to dig out > > very complex methods. A good example here are > > ODE-solvers (Euler, Runge-Kutta,...). I think a > > suckless bignum library should be much more > > lightweight. In the end, we don't want to do > > simulations on big mainframes, but just a library with > > just enough functions to get around with to handle > > tasks like dc(1) and bc(1). > > > Well, buried in David Dunfield's Micro-C site and within > his mc323exa.zip [0][1][2] file under MISC/LNUM.C is a > Tom St. Denis ported version of libtommath to the 16-bit > not quite ANSI Micro-C. It's 502 sloc, and will compile > with gcc 4.8.4 on Ubuntu 14.04.3 using CFLAGS="-c -Wall > -ansi -pedantic" after you massage it lightly (add > #include <string.h>) to the top. I haven't tested it so > it may make some bad assumptions about word size, > endianess, etc. Like most of Tom St. Denis' work, it > appears to be not-copyrighted (or public domain, "Tom St > Denis (t...@dasoft.org), Jan 2000. Distribute like > mad!!!"). See the accompanying MISC/LNUM.TXT [2]. A > file list from the header is copied below. And if you > remember SOH-CAH-TOA, you have some trig functions as > well. > > [0] http://www.classiccmp.org/dunfield/dos/index.htm > [1] http://www.classiccmp.org/dunfield/dos/sample.txt > [2] http://www.classiccmp.org/dunfield/dos/mc323exa.zip > > Function list > -------------- > void l_copy(word *a, word *b) [ Copy the bignum from a to > b ] void l_clear(word *a) [ Set a to zero ] > void l_set(word *a, word n) [ Set a to the digit n ] > > int l_iszero(word *a) [ is a == 0 ] > int l_cmp(word *a, word *b) [ compare a and b ] > int l_cmp_d(word *a, word b) [ compare a and 'b' ] > > int l_shr(word *a, word *b) [ b = a/2 (return carry) ] > int l_shr_s(word *a) [ a = a/2 (return carry) ] > int l_shl(word *a, word *b) [ b = 2a (return carry) ] > int l_shl_s(word *a) [ a = 2a (return carry) ] > > void l_add(word *a, word *b, word *c) [ c = a + b ] > void l_add_s(word *a, word *b) [ a += b ] > void l_add_d(word *a, word b) [ a += 'b' ] > void l_sub(word *a, word *b, word *c) [ c = a - b ] > void l_sub_s(word *a, word *b) [ a -= b ] > void l_sub_d(word *a, word b) [ a -= 'b'] > void l_mul(word *a, word *b, word *c) [ c = ab ] > void l_mul_s(word *a, word *b) [ a *= b ] > void l_mul_d(word *a, word b) [ a *= 'b'] > void l_div(word *a, word *b, word *q, word *r) [ q = a/b, > r = a%b ] void l_div_s(word *a, word *b) [ a /= b ] > void l_div_d(word *a, word b) [ a /= 'b'] > void l_mod(word *a, word *b, word *c) [ c = a%b ] > void l_mod_s(word *a, word *b) [ a %= b ] > word l_mod_d(word *a, word b) [ returns a mod b ] > > void l_addmod(word *a, word *b, word *m, word *c) [ c = > (a+b) mod m ] void l_submod(word *a, word *b, word *m, > word *c) [ c = (a-b) mod m ] void l_mulmod(word *a, word > *b, word *m, word *c) [ c = (ab) mod m ] > > void l_sqr(word *a) [ c = a^2 ] > void l_sqrmod(word *a, word *m, word *c) [ c = a^2 mod m ] > void l_expt(word *a, word *b, word *c) [ c = a^b ] > void l_exptmod(word *a, word *b, word *m, word *c) [ c = > a^b mod m ] > > void l_gcd(word *a, word *b, word *c) [ c = gcd(a, b) ] > void l_lcm(word *a, word *b, word *c) [ c = lcm(a, b) ] > void l_invmod(word *a, word *n, word *b) [ b = a^-1 mod n > ] void l_sqrt(word *n, word *N) [ N = n^1/2 ] > > void l_print(word *a, word radix, FILE *out) [ Output ] > void l_println(word *a, word radix, FILE *out) [ Output > with new line ] > > [ radixes from 2 to 64 ] > void l_toradix(word *a, word radix, char *out) [ put in > buffer ] void l_fromradix(char *a, word radix, word *b) > [ read string ] > > void l_readraw(word *a, unsigned char *in, int len) > [ read binary ] int l_toraw(word *a, unsigned char *out) > [ write binary ] >
pgpS36raXqsWo.pgp
Description: OpenPGP digital signature