Hello everyone.

I recently discovered PicoLisp, and like a few other newcomers, I was initially 
disappointed to find that there was no support for floating point arithmetic. 
After reading the excellent documentation, I came to understand why that is so 
and also why fixed point arithmetic provides a fully acceptable alternative.

As I found out more and more about PicoLisp and what it can do, I was 
constantly amazed at its versatility and usability. When I found out about the 
PicoLisp capability to interface with C through the "native" and "gcc" 
functions, I decided to write a library to implement floating point arithmetic 
for PicoLisp "just because".

Although this was my first interaction with PicoLisp (or any other Lisp, for 
that matter), I found the process remarkably easy. The result of my project is 
the picolisp-fp library for 64 bit PicoLisp, available at 

In the IEEE-754 floating point standard as implemented in C and other 
languages, floating point values are represented as 32 or 64 bit words. Certain 
bit fields in these words are interpreted as the sign, the exponent, and the 
mantissa. However, in computer memory, each floating point value is simply a 32 
or 64 bit machine word. The picolisp-fp library uses PicoLisp integers to hold 
floating point words, and passes them to external C functions to be 
"interpreted" and acted upon as floating point values. Floating point results 
are passed back to PicoLisp "re-interpreted" as integers. No change to PicoLisp 
is required - the picolisp-fp functions, through calls to the "gcc" or "native" 
function, take integers as arguments and return integers. The library provides 
basic math for single and double precision floating point values as well as all 
of the trigonometric and transcendental functions from the C <math.h> header 
file, along with functions that translate between single precision values, 
double precision values, fixed point values, and their string representations.

The library is provided in two forms - an inline version that uses the "gcc" 
function, and a separately compiled version that consists of both an external 
shared library (compiled from a C file) and a PicoLisp file that uses the 
"native" function to access the dynamic library. The GitHub repository also 
contains examples and unit tests. Although I have only run the library on 
x86_64 Linux, I see no reason why it shouldn't also work with other 64 bit CPUs 
and operating systems.

Of course, this library is the solution to a nonexistent problem, but I think 
it is possible that someone might find it useful in some special cases. And at 
least it provides the means to shut up newbies like me who demand floating 
point support!


Greg Lee

UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to