htcleo: add log function
This commit is contained in:
parent
77e39896ce
commit
4b3aa128b9
@ -101,6 +101,7 @@ obj-$(CONFIG_MACH_BRAVOC) += board-bravoc-microp.o clock.o
|
||||
|
||||
obj-$(CONFIG_MACH_HTCLEO) += board-htcleo.o board-htcleo-spi.o board-htcleo-panel.o board-htcleo-keypad.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += board-htcleo-ts.o board-htcleo-mmc.o ieee754-df.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += board-htcleo-log.o
|
||||
obj-$(CONFIG_MACH_HTCLEO) += clock-wince.o
|
||||
|
||||
# MSM7x30 boards
|
||||
|
121
arch/arm/mach-msm/board-htcleo-log.c
Normal file
121
arch/arm/mach-msm/board-htcleo-log.c
Normal file
@ -0,0 +1,121 @@
|
||||
/* arch/arm/mach-msm/board-htcleo-log.c
|
||||
*
|
||||
* Copyright (C) 2010 Cotulla
|
||||
* Copyright (C) Open Watcom Project
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* 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 General Public License for more details.
|
||||
*
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
|
||||
|
||||
#define sqrt_of_half 0.7071067811865475244
|
||||
#define C1 (355./512.)
|
||||
#define C2 (-2.121944400546905827679e-4)
|
||||
|
||||
|
||||
static const double APoly[] =
|
||||
{
|
||||
-0.78956112887491257267,
|
||||
0.16383943563021534222e+2,
|
||||
-0.64124943423745581147e+2
|
||||
};
|
||||
|
||||
static const double BPoly[] =
|
||||
{
|
||||
1.0,
|
||||
-0.35667977739034646171e+2,
|
||||
0.31203222091924532844e+3,
|
||||
-0.76949932108494879777e+3
|
||||
};
|
||||
|
||||
static double _EvalPoly( double x, const double *poly, int degree )
|
||||
/********************************************************************/
|
||||
{
|
||||
double z;
|
||||
|
||||
z = *poly++;
|
||||
do
|
||||
{
|
||||
z = z * x + *poly++;
|
||||
} while( --degree != 0 );
|
||||
return( z );
|
||||
}
|
||||
|
||||
static double frexp( double value, int *exp )
|
||||
/**********************************************/
|
||||
{
|
||||
int n;
|
||||
union
|
||||
{
|
||||
double x;
|
||||
unsigned short a[4];
|
||||
} u;
|
||||
|
||||
n = 0;
|
||||
u.x = value;
|
||||
if( value != 0.0 )
|
||||
{
|
||||
n = (u.a[3] & 0x7ff0) >> 4;
|
||||
n -= 0x03fe;
|
||||
u.a[3] &= 0x800f;
|
||||
u.a[3] |= 0x3fe0;
|
||||
}
|
||||
*exp = n;
|
||||
return( u.x );
|
||||
}
|
||||
|
||||
|
||||
double log(double x)
|
||||
/***********************************/
|
||||
{
|
||||
int exp;
|
||||
double z;
|
||||
|
||||
if( x <= 0.0 )
|
||||
{
|
||||
BUG();
|
||||
x = 0; // who cares? :)
|
||||
}
|
||||
else
|
||||
{
|
||||
x = frexp( x, &exp );
|
||||
z = x - .5;
|
||||
if( x > sqrt_of_half )
|
||||
{
|
||||
z -= .5;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = z;
|
||||
--exp;
|
||||
}
|
||||
z = z / (x * .5 + .5);
|
||||
x = z * z;
|
||||
x = z + z * x * _EvalPoly( x, APoly, 2 ) / _EvalPoly( x, BPoly, 3 );
|
||||
if( exp != 0 )
|
||||
{
|
||||
z = exp;
|
||||
x = (z * C2 + x) + z * C1;
|
||||
}
|
||||
}
|
||||
return( x );
|
||||
}
|
||||
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Cotulla");
|
||||
MODULE_DESCRIPTION("htcleo log function");
|
||||
// END OF FILE
|
Loading…
Reference in New Issue
Block a user