我正在为一个没有数学库的平台开发,所以我需要构建自己的工具。我当前获取分数的方式是将浮点数转换为定点数(乘以(float)0xFFFF,转换为int),仅获取低位部分(使用0xFFFF进行屏蔽),然后再将其转换回浮点数。
然而,精度问题让我困扰不已。我使用我的Frac()和InvFrac()函数绘制抗锯齿线条。使用 modf
可以得到完美平滑的线条。但使用自己的方法时,由于精度损失,像素会开始跳动。
以下是我的代码:
const float fp_amount = (float)(0xFFFF);
const float fp_amount_inv = 1.f / fp_amount;
inline float Frac(float a_X)
{
return ((int)(a_X * fp_amount) & 0xFFFF) * fp_amount_inv;
}
inline float Frac(float a_X)
{
return (0xFFFF - (int)(a_X * fp_amount) & 0xFFFF) * fp_amount_inv;
}
提前致谢!