Source code for mot.library_functions.unity

from mot.library_functions.base import SimpleCLLibrary

__author__ = 'Robbert Harms'
__date__ = '2018-05-07'
__maintainer__ = 'Robbert Harms'
__email__ = 'robbert.harms@maastrichtuniversity.nl'
__licence__ = 'LGPL v3'


[docs]class log1pmx(SimpleCLLibrary): def __init__(self): """log(1 + x) - x""" super().__init__(''' double log1pmx(double x){ if (fabs(x) < 0.5) { int n; double xfac = x; double term; double res = 0; for(n = 2; n < 500; n++) { xfac *= -x; term = xfac / n; res += term; if (fabs(term) < MOT_EPSILON * fabs(res)) { break; } } return res; } else { return log1p(x) - x; } } ''')
[docs]class lgam1p(SimpleCLLibrary): def __init__(self): """Compute lgam(x + 1). This is a simplification of the corresponding function in scipy https://github.com/scipy/scipy/blob/master/scipy/special/cephes/unity.c 2018-05-14 """ super().__init__('double lgam1p(double x){return lgamma(x + 1);}')