C++ 如何将两字节映射实数相乘
我使用一个简单的uint8_t来存储介于0.0和1.0之间的实数值,其中0映射到0.0,255映射到1.0,线性插值介于两者之间 很明显,我可以用下面的程序乘以这个数:C++ 如何将两字节映射实数相乘,c++,multiplication,C++,Multiplication,我使用一个简单的uint8_t来存储介于0.0和1.0之间的实数值,其中0映射到0.0,255映射到1.0,线性插值介于两者之间 很明显,我可以用下面的程序乘以这个数: 除以它们/255.0f 将得到的浮点数相乘 将结果转换回uint8范围(uint8_t)(结果*255.0f) 但是,我想知道是否存在一种更简单的方法,可以在不涉及浮点转换的情况下产生相同的结果(即一些黑魔法位的篡改或移位) 任何帮助都将不胜感激 查看此线程,显示了几种不同的插值方法,“除以255”-答案正是我所需要的。完美
- 除以它们/255.0f
- 将得到的浮点数相乘
- 将结果转换回uint8范围(uint8_t)(结果*255.0f)
任何帮助都将不胜感激 查看此线程,显示了几种不同的插值方法,“除以255”-答案正是我所需要的。完美的谢谢您的过程给出了类似于
(uint8_t)(((a/255.0f)*(b/255.0f))*255.0f)的代码。可以重写(uint8_t)(((a*b)/(255.0f*255.0f))*255.0f)
,然后(uint8_t)((a*b*255.0f)/(255.0f*255.0f))
,它简化为(uint8_t)((a*b)/255.0f)
,或者只使用整数乘法和除法(演员阵容仍然需要从int
)转换回来。@BillAskaga我本来打算链接这一个,但决定整个线程值得一读:)