0

我想知道如果没有内置函数可以代表无穷大。
我知道如果我们使用floator double,我们将能够使用infinity()with #include <limits>。但是如果我需要使用int或在 NTL 的情况下,ZZ我应该如何表示无穷大?我应该写点新东西吗?它在 C++ 中是如何表示的?

编辑:我提出这个问题是因为我想为椭圆曲线上的点实现一个加法算法。所以,我需要无穷大来表示无穷大点。我想知道我是否会更好地使用投影坐标并使用 [0:1:0] 来表示无穷远点,但想先探索无穷大intZZ选项。

4

2 回答 2

1

如果只是一个象征性的表示,使其在一般意义上“起作用”,就像无穷大一样?

你当然可以做这样的事情。对于大多数不会让您有任何用处的计算问题。一种简单的方法是创建自己的数据类型并覆盖所有运算符以适当地处理无穷大。并非所有无穷大都是相同的,因此您需要处理该问题。例如,您可以将自定义浮点数定义为

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;
};

注意:您需要仔细考虑如何处理零和无穷大。上面的代码没有经过深思熟虑,但我希望它能给你一些思考。

于 2013-10-11T19:54:31.723 回答
1

一般来说,如果您在有限精度的机器上遇到无穷大,那么您的计算方法就没有正确解决手头的问题。您应该事先分析处理无穷大,或者找到一种方法以有限的精度适当地避免它。例如,如果您必须处理 f(x)=sin(x)/x,您可能不想让您的代码在 x = 0 处以有限精度计算它。相反,您需要检查 x 是否为 0然后返回 f(0) = 1.0。

于 2013-10-11T05:01:42.620 回答