Giter Site home page Giter Site logo

scientificc / cmathl Goto Github PK

View Code? Open in Web Editor NEW
44.0 3.0 5.0 1.58 MB

A pure-C math library with a great variety of mathematical functions. Seeks to be close to C89/C90 compliant for portability.

Home Page: https://scientificc.github.io/cmathl/

License: MIT License

C 65.88% C++ 0.38% CMake 2.02% Shell 0.28% Batchfile 0.04% Perl 31.40%
c math-library cml complex real math-functions cmake configuration-macros mathematical-functions

cmathl's Introduction

CMathL

Mentioned in Awesome C Build Status Documentation Status License: MIT

CMathL (CML) is a pure-C math library with a great variety of mathematical functions. It is almost 100% C89/C90 compliant.

You can read the documentation to learn more about CML.

Table of Contents

Using the CML

NOTE: This will install in /usr/local. You probably don't want that. But this is a quick start. The best thing to do is to combine this library with your other code into a larger CMake project/solution.

Install the last release with clib:

$ clib install ScientificC/cmathl

or,

install from source code: First install the libs ScientificC/errno and ScientificC/vector. How to install the dependencies?

Then, execute the following commands on the cli:

$ git clone https://github.com/ScientificC/cmathl.git
$ cd cml
$ mkdir build
$ cd build
$ cmake .. <build options>
$ make && make install

Build Options

You can read more about in the following chapter of the documentation.

Install Dependencies

To install ScientificC/errno and Scientific/vector you can run the following commands on the cli:

$ cd /tmp

# to install scic/errno

$ git clone https://github.com/ScientificC/errno.git
$ cd errno
$ mkdir build && cd build
$ cmake ..
$ make && sudo make install
$ cd ..

# and to install scic/vector

$ git clone https://github.com/ScientificC/vector.git
$ cd vector
$ mkdir build && cd build
$ cmake ..
$ make && sudo make install
$ cd ..

Running Tests

To run the test suite from a command prompt, using a Makefile-like generator, execute the following:

$ git clone https://github.com/ScientificC/cmathl.git
$ cd cml
$ mkdir build
$ cd build
$ cmake .. <build options>
$ make && ctest

Build Options

Configuration Macros

CML can be configured with the following preprocessors (described in the following sections of this document):

  • CML_NO_ALIASES
  • CML_NO_MATH
  • CML_NO_STDBOOL
  • CML_NO_STDINT

You can define these macros during compilation time with flags:

cmake .. -DCML_NO_STDBOOL=ON -DCML_NO_MATH=ON

Bool Type

If the macro CML_NO_STDBOOL is defined, the library will not include stdbool.h and will define a type or macro bool of type int, int32_t, unsigned char or something like to represent boolean values. This is useful for platforms where stdbool.h is not available.

Integer Type

By default, mint_t is a int32_t if the header stdint.h is available. If the header stdint.h is not available, disabled by defining CML_NO_STDINT, mint_t is a int. This can be changed by predefining mint_t as a desired type.

Float Point Type

The float type used by CML is by default double.

Math Functions Aliases

Currently, all functions defined in cml have an alias which allows greater readability when working with the library. These aliases allow, for example, functions such as cml_sin andcml_complex_cosh to have aliases that are much more readable, such as sin andccosh respectively. Then, this could bring certain incompatibilities with libraries like math.h, since these aliases will be defined as long as they are not indicated otherwise, and this may not be compatible with math definitions.

By defining CML_NO_ALIASES, these aliases will not be defined, leaving only the original functions names and, thus, allowing greater compatibility.

Math Library

By default, cml will use some math functions from the header math.h if it is available. If the header math.h is not available, disabled by defining CML_NO_MATH, cml will use its own definition of them.

Build Options

  • CML_BUILD_SHARED: (Default ON) Controls if the shared library is built
$ cmake .. -DCML_BUILD_SHARED=ON
$ cmake .. -DCML_BUILD_SHARED=OFF
  • CML_BUILD_STATIC: (Default ON) Controls if the static library is built
$ cmake .. -DCML_BUILD_STATIC=ON
$ cmake .. -DCML_BUILD_STATIC=OFF
  • CML_BUILD_TESTS: (Default ON) Build the unit tests
$ cmake .. -DCML_BUILD_TESTS=ON
$ cmake .. -DCML_BUILD_TESTS=OFF
  • CMAKE_BUILD_TYPE: (Default Release) Set this to 'Release' or 'Debug'
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ cmake .. -DCMAKE_BUILD_TYPE=Debug
  • CMAKE_INSTALL_PREFIX: (Default /usr/local) Allows you to specify where make install sends the output.
$ cmake .. -DCMAKE_INSTALL_PREFIX=~/cml/
$ cmake .. -DCMAKE_INSTALL_PREFIX=~/Projects/myproject/
$ cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/

Documentation

A great way to learn how to use the library is to review the unit tests, examples and documentation.

Can I trust this math library?

A goal of the unit tests is to test each function against CML_FLT_EPSILON and CML_DBL_EPSILON which are defined in cml.h, currently as 1.1920928955078125e-07 and 0.2204460492503131e-16, respectively. A number of functions do not yet have unit tests proving epsilon, but more are coming.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.