gpt4 book ai didi

用于除以 2 个整数常量的 C++ 嵌入式平台可读性

转载 作者:行者123 更新时间:2023-11-30 03:38:44 24 4
gpt4 key购买 nike

我有以下代码:

int foo = SamplingSomeValue();
int threshold = foo * 7 / 10;
...

也就是说,该算法对一些值进行采样,并将采样值的70%作为下限阈值,以找到那些相似的值。

但是,常量 7/10 很难看。将其替换为 tRatio 可读性更强,其中 tRatio 定义为 constexpr float tRatio = 0.7;。然而,在没有浮点运算硬件单元的嵌入式处理器中效率不高。

很明显我们不能写constexpr int tRatio = (7/10);,因为它是0。

保持效率和可读性的最佳方法是什么?

最佳答案

为了可读性和可维护性,您可以定义一个 cFraction 类,它包括:

class cFraction
{
public:
cFraction( int num, int den ) : m_num(num), m_den(den){ }
int operator*( int rhs ) const
{
return (rhs * m_num) / m_den ;
}

private:
int m_num ;
int m_den ;
} ;

还有一个非成员重载:

int operator*( int lhs, const cFraction& rhs )
{
return rhs * lhs ; // Multiply is commutative,
// swap operands to use member overload
}

然后给出:

const cFraction SEVENTY_PERCENT( 7, 10 ) ;

你可以这样写:

int threshold = foo * SEVENTY_PERCENT ;

或:

int threshold = SEVENTY_PERCENT * foo ;

当然,虽然这提供了可读性,但考虑到相当通用的名称,您可能不得不使用一整套重载和类型转换来完成该类,以使 cFraction 看起来像一个完整的算术类型.这在其他情况下可能确实有用,但您可以通过仅实现上述内容并将其命名为 cIntegerRatio 来避免这种情况,以明确此类具有非常特定的目的并且仅乘以一个整数是有意义的。

关于用于除以 2 个整数常量的 C++ 嵌入式平台可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39340267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com