Code Monkey home page Code Monkey logo

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.

cmathl's People

Contributors

lukasgelbmann avatar timgates42 avatar ulises-jeremias avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

cmathl's Issues

Configurable header files

The main idea is to generate the header files to be installed in the system after detecting the optimal configuration for the machine. For this it is suggested to see how to do it with CMake.

One Dimensional Root-Finding

One Dimensional Root-Finding

Feature

Currently I am developing the routines for finding roots of arbitrary one-dimensional functions.
The idea is to offer simple functions that allow it, without the need to implement a robust search system such as workspaces and a little bigger structures like thoose.

Discussion

Since I do not have much knowledge about the different existing methods for the search of roots, would be grateful for any type of contribution that could be made.

In the first comment I show the methods that I plan to implement in this new feature as well as the prototype of each of them with the idea that each one of them is up for discussion.

Contributing

Those who wish to contribute to this module are asked to discuss the implementation of existing methods as well as the suggestion and development of new ones.

Building cmake file issue

I tried to build CMake file but I run across a problem.

cmake ..
-- Using math functions aliases
-- Using stdbool.h
-- Using stdint.h
-- Using math.h
-- No CMAKE_BUILD_TYPE specified, using default RELEASE
-- Built type is set to Release
CMake Error at cml/src/CMakeLists.txt:49 (find_library):
  Could not find SCIC_ERRNO_LIB using the following names: scic-errno



-- Configuring incomplete, errors occurred!
See also "/home/axe/git_clones/cmathl/build/CMakeFiles/CMakeOutput.log".

I think the problem which libraries collapse. Why this happening...

  collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0]
  collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../lib] ==> [/usr/lib]
  collapse library dir [/lib/../lib] ==> [/lib]
  collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
  collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../..] ==> [/usr/lib]

Here, complete output.
CMakeOutput.log

Running Statistics

Running Statistics

I want to start the development of the module to compute running statistics. The truth is that at the moment I have no plans to implement anything that does not already exist in other libraries, but I would like this to not be the case. That is why I start this issue asking for contributions to this module, be it ideas, implementation and discussions about the development of this module.

Contributing

Those who wish to contribute to this module are asked to discuss the implementation of existing methods as well as the suggestion and development of new ones.

cmake error

git clone https://github.com/ScientificC/cmathl.git
cd cmathl
mkdir build && cd build
 cmake ..
-- The C compiler identification is GNU 9.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Using math functions aliases
-- Using stdbool.h
-- Using stdint.h
-- Using math.h
-- No CMAKE_BUILD_TYPE specified, using default RELEASE
-- Built type is set to Release
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
SCIC_ERRNO_LIB
    linked by target "cml" in directory /media/Coding/C/cmathl/cml/src
    linked by target "cml_static" in directory /media/Coding/C/cmathl/cml/src

-- Configuring incomplete, errors occurred!

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.