mathutil.h

来自「傅立叶变换和小波变换是图像压缩的重要工具。该代大戏是利用小波变换进行图像压缩。」· C头文件 代码 · 共 98 行

H
98
字号
#ifndef MATHUTIL_H
#define MATHUTIL_H

#include "wave.h"

#ifndef LN2
#define LN2 		(0.69314718f)
#endif

#ifndef LN2inverse
#define LN2inverse	(1.442695f)
#endif

#ifndef log2
#define log2(val) (log(val)*LN2inverse)
#endif

#define MSE2PSNR(mse)	((float)( 48.165 - 10.0*log10(mse)))
#define PSNR2MSE(psnr)	((float)pow(10.0,4.8165 - (psnr)*0.1))

uint INLINE ilog2ceil(uint val)
{
	__asm
	{
		FILD val
		FSTP val
		mov eax,val
		add eax,0x7FFFFF // 1<<23 - 1
		shr eax,23
		sub eax,127
	}
}

uint INLINE ilog2floor(uint val)
{
	__asm
	{
		FILD val
		FSTP val
		mov eax,val
		shr eax,23
		sub eax,127
	}
}

int INLINE ftoi(float f)
{
int i;
	__asm
	{
		FLD f
		FISTP i
	}
return i;
}

int INLINE ftoi256(float f)
{
int i;
	i = ftoi(f);
return minmax(i,0,255);
}

float INLINE itof(int i)
{
float f;
	__asm
	{
		FILD i
		FSTP f
	}
return f;
}

uint INLINE flog2(float xf) // !!! 
{
return ((*(int*)&xf) >> 23) - 127;
}

float INLINE fsqrt(float f)
{
	__asm
	{
		FLD f
		FSQRT
		FSTP f
	}
return f;
}

void float_RoundToZero(void);
void float_SinglePrecision(void);

bool float_DoesRoundToZero(void);

#endif // MATHUTIL_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?