A Survey of Gaussian Convolution Algorithms
Macros | Functions
basic.h File Reference

Portable types, math constants, and timing. More...

Detailed Description

Portable types, math constants, and timing.

Author
Pascal Getreuer getre.nosp@m.uer@.nosp@m.cmla..nosp@m.ens-.nosp@m.cacha.nosp@m.n.fr

This purpose of this file is to improve portability.

Types uint8_t, uint16_t, uint32_t should be defined as unsigned integer types such that

Similarly, int8_t, int16_t, int32_t should be defined as signed integer types such that

These definitions are implemented with types __int8, __int16, and __int32 under Windows and by including stdint.h under UNIX.

To define the math constants, math.h is included, and any of the following that were not defined by math.h are defined here according to the values from Hart & Cheney.

For precise timing, a function millisecond_timer() is defined.

Copyright (c) 2010-2013, Pascal Getreuer All rights reserved.

This program is free software: you can redistribute it and/or modify it under, at your option, the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version, or the terms of the simplified BSD license.

You should have received a copy of these licenses along with this program. If not, see http://www.gnu.org/licenses/ and http://www.opensource.org/licenses/bsd-license.html.

Definition in file basic.h.

#include <math.h>
#include <stdlib.h>
#include <stdint.h>

Go to the source code of this file.

Macros

#define M_2PI   6.28318530717958647692528676655900576
 The constant 2 pi.
 
#define M_PI   3.14159265358979323846264338327950288
 The constant pi.
 
#define M_PI_2   1.57079632679489661923132169163975144
 The constant pi/2.
 
#define M_PI_4   0.78539816339744830961566084581987572
 The constant pi/4.
 
#define M_PI_8   0.39269908169872415480783042290993786
 The constant pi/8.
 
#define M_SQRT2   1.41421356237309504880168872420969808
 The constant sqrt(2)
 
#define M_1_SQRT2   0.70710678118654752440084436210484904
 The constant 1/sqrt(2)
 
#define M_E   2.71828182845904523536028747135266250
 The natural number.
 
#define M_LOG2E   1.44269504088896340735992468100189213
 Log base 2 of the natural number.
 
#define M_LOG10E   0.43429448190325182765112891891660508
 Log base 10 of the natural number.
 
#define M_LN2   0.69314718055994530941723212145817657
 Natural log of 2.
 
#define M_LN10   2.30258509299404568401799145468436421
 Natural log of 10.
 
#define M_EULER   0.57721566490153286060651209008240243
 Euler number.
 
#define M_SQRT2PI   2.50662827463100050241576528481104525
 The constant sqrt(2 pi)
 
#define ROUND(X)   (floor((X) + 0.5))
 Round double X.
 
#define ROUNDF(X)   (floor((X) + 0.5f))
 Round float X.
 
#define ATTRIBUTE_UNUSED
 
#define ATTRIBUTE_ALWAYSINLINE
 

Functions

unsigned long millisecond_timer ()
 Millisecond-precision timer function. More...
 

Function Documentation

unsigned long millisecond_timer ( )

Millisecond-precision timer function.

Returns
Clock value in units of milliseconds

This routine implements a timer with millisecond precision. In order to obtain timing at high resolution, platform-specific functions are needed:

  • On Windows systems, the GetSystemTime function is used.
  • On POSIX systems, the gettimeofday function is used.

Otherwise as a fallback, time.h time is used, and in this case millisecond_timer() has only second accuracy. Preprocessor symbols are checked in attempt to detect whether the platform is POSIX or Windows and defines millisecond_timer() accordingly. A particular implementation can be forced by defining USE_GETSYSTEMTIME, USE_GETTIMEOFDAY, or USE_TIME.

Definition at line 63 of file basic.c.