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 https://github.com/gleetbone/picolisp-fp. 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! Thanks, Greg Lee -- UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe
