2006-05-22 17:32:04 +04:00
/*
* dvb - math provides some complex fixed - point math
* operations shared between the dvb related stuff
*
* Copyright ( C ) 2006 Christoph Pfister ( christophpfister @ gmail . com )
*
* This library is free software ; you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation ; either version 2.1 of
* the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Lesser General Public License for more details .
*/
# ifndef __DVB_MATH_H
# define __DVB_MATH_H
# include <linux/types.h>
/**
2016-09-22 13:59:03 +03:00
* intlog2 - computes log2 of a value ; the result is shifted left by 24 bits
2015-08-22 13:37:28 +03:00
*
* @ value : The value ( must be ! = 0 )
2006-05-22 17:32:04 +04:00
*
* to use rational values you can use the following method :
2016-07-20 15:22:38 +03:00
*
2006-05-22 17:32:04 +04:00
* intlog2 ( value ) = intlog2 ( value * 2 ^ x ) - x * 2 ^ 24
*
2015-08-21 20:17:13 +03:00
* Some usecase examples :
2016-07-20 15:22:38 +03:00
*
2015-08-21 20:17:13 +03:00
* intlog2 ( 8 ) will give 3 < < 24 = 3 * 2 ^ 24
2016-07-20 15:22:38 +03:00
*
2015-08-21 20:17:13 +03:00
* intlog2 ( 9 ) will give 3 < < 24 + . . . = 3.16 . . . * 2 ^ 24
2016-07-20 15:22:38 +03:00
*
2015-08-21 20:17:13 +03:00
* intlog2 ( 1.5 ) = intlog2 ( 3 ) - 2 ^ 24 = 0.584 . . . * 2 ^ 24
2006-05-22 17:32:04 +04:00
*
2015-08-22 13:37:28 +03:00
*
* return : log2 ( value ) * 2 ^ 24
2006-05-22 17:32:04 +04:00
*/
extern unsigned int intlog2 ( u32 value ) ;
/**
2015-08-22 13:37:28 +03:00
* intlog10 - computes log10 of a value ; the result is shifted left by 24 bits
*
* @ value : The value ( must be ! = 0 )
2006-05-22 17:32:04 +04:00
*
* to use rational values you can use the following method :
2016-07-20 15:22:38 +03:00
*
2006-05-22 17:32:04 +04:00
* intlog10 ( value ) = intlog10 ( value * 10 ^ x ) - x * 2 ^ 24
*
2015-08-21 20:17:13 +03:00
* An usecase example :
2016-07-20 15:22:38 +03:00
*
2015-08-21 20:17:13 +03:00
* intlog10 ( 1000 ) will give 3 < < 24 = 3 * 2 ^ 24
2016-07-20 15:22:38 +03:00
*
2006-05-22 17:32:04 +04:00
* due to the implementation intlog10 ( 1000 ) might be not exactly 3 * 2 ^ 24
*
* look at intlog2 for similar examples
*
2015-08-22 13:37:28 +03:00
* return : log10 ( value ) * 2 ^ 24
2006-05-22 17:32:04 +04:00
*/
extern unsigned int intlog10 ( u32 value ) ;
# endif