仅使用整数运算计算加权平均值[关闭]

问题描述 投票:0回答:0

我有一个类,该类具有根据加权分数组件计算总百分比分数的功能。我希望该类尽可能节省内存并优化计算,因为我将创建大量实例并且有很多分数组件,所以我想避免存储 float 类型并在以下情况下使用 float 操作可能。

我将分数分量值和权重存储为 uint8 类型,然后在计算前将它们转换为浮点数,但我能以某种方式仅使用整数运算来完成整个计算吗?

使用浮点数的数学是这样的:

// Object Properties
// ---------------------------
// score component values from 0-10
uint8 Speed = 9;
uint8 Security = 4;

// score component weights adding up to 100
uint8 WeightSpeed = 70;
uint8 WeightSecurity = 30;

// Function
// ----------------------------

// convert score components to fractions
float speedFraction = Speed / 10.f;
float securityFraction = Security / 10.f;

// convert weights to fractions
float weightSpeedFraction = WeightSpeed / 100.f;
float weightSecurityFraction = WeightSecurity / 100.f;

// compute weighted score components
float weightedSpeedScore = speedFraction * weightSpeedFraction;
float weightedSecurityScore = securityFraction * weightSecurityFraction;

uint8 finalScore = (weightedSpeedScore + weightedSecurityScore) * 100;

为了清楚起见,我将计算分成多行。

c++ math optimization weighted-average
© www.soinside.com 2019 - 2024. All rights reserved.