2013-10-11 6 views
0

그렇게 할 수있는 내장 함수가 없다면 무한 성을 어떻게 나타낼 지 알고 싶습니다.
float 또는 double을 사용하는 경우 infinity()#include <limits>을 사용할 수 있습니다. 그러나 int 또는 NTL의 경우 ZZ을 사용해야하는 경우 무한대를 어떻게 나타내야합니까? 나는 새로운 것을 써야 하나? 어떻게 C++로 표현됩니까?C++ NTL (Victor Shoup 기자) : 무한대 표현 방법

편집 : 타원 곡선에 점에 대한 더하기 알고리즘을 구현하고 싶기 때문에이 질문이 제기됩니다. 그래서 무한의 지점을 나타 내기 위해 무한대가 필요합니다. 나는 투영 좌표를 사용하는 것이 더 나을 것이고 무한대의 점을 표현하기 위해 [0 : 1 : 0]을 가지지 만, 무한을 int 또는 ZZ 옵션으로 먼저 탐구하고 싶다면 궁금합니다.

+0

어떻게 무한대를'int'로 사용해야합니까? 어떤 맥락에서? – nhgrif

+0

정수에는 무한대를 나타내는 규칙이 없습니다. 즉, 정수로 수행 할 수있는 산술 연산은 무한 값을 처리하거나 생성하는 데 대한 단서가 없습니다. 정수로 작업 할 때 거의 아무도 무한대에 사용하지 않기 때문에 이런 일이 발생합니다. 아마도 당신은 왜 당신이 무한하다고 생각하는지 우리에게 말해야 할 것입니다. – DanielKO

+0

안녕하세요 @ nhgrif, @ DanielKO, 질문에 무한대가 필요한 이유를 추가하겠습니다. – BlackAdder

답변

1

일반적으로 유한 정밀 기계에서 무한대로 실행하는 경우 계산 방법으로 문제를 올바르게 처리하지 못합니다. 먼저 무한대를 분석적으로 다루거나 유한 정밀도로 적절히 피하는 방법을 찾아야합니다. 예를 들어, f (x) = sin (x)/x를 다루어야한다면 코드가 x = 0에서 유한 정밀도로 이것을 평가하도록하고 싶지 않을 것입니다. 대신 x가 0인지 확인하고 싶을 것입니다 f (0) = 1.0을 반환합니다.

+0

일반적으로 무한대처럼 "행동"하는 상징적 인 표현은 어떤가? – BlackAdder

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

주 같은 것을 할 수있는 사용자 정의 플로트를 정의 할 수 있습니다 : 당신은 0과 무한대 모두를 치료하는 방법에 관한 생각을 많이 제공해야합니다. 위의 코드는 잘 생각하지 못했지만, 생각해 볼만한 점이 있기를 바랍니다.