📄 mathutil.h
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -