如果只是一个象征性的表示,使其在一般意义上“起作用”,就像无穷大一样?
你当然可以做这样的事情。对于大多数不会让您有任何用处的计算问题。一种简单的方法是创建自己的数据类型并覆盖所有运算符以适当地处理无穷大。并非所有无穷大都是相同的,因此您需要处理该问题。例如,您可以将自定义浮点数定义为
class MyFloat
{
public:
MyFloat(float a):
m_val(a),
m_isInf(false),
m_orderInf(0)
{}
bool isInf(){return m_isInf;}
int orderInf(){return m_orderInf;}
float value(){return m_val;}
// define custom operators
MyFloat & operator+= (MyFloat const & rhs)
{
if(rhs.isInf() || m_isInf)
{
m_orderInf = m_orderInf > rhs.orderInf() ? m_orderInf : rhs.orderInf();
m_isInf = true;
}
else
{
m_val += rhs.value();
}
return *this;
}
// other operators you would need to define
MyFloat & operator/= (MyFloat const & rhs);
MyFloat & operator*= (MyFloat const & rhs);
private:
float m_val;
bool m_isInf;
int m_orderInf;
};
注意:您需要仔细考虑如何处理零和无穷大。上面的代码没有经过深思熟虑,但我希望它能给你一些思考。