programing

Java에서 무한대를 구현하는 방법2

prostudy 2022. 7. 26. 22:17
반응형

Java에서 무한대를 구현하는 방법

자바에는 모든 수치 데이터 유형에 대해 무한대를 나타내는 것이 있습니까?수학 연산을 할 수 있도록 구현하려면 어떻게 해야 합니까?

예.

int myInf = infinity; //However it is done
myInf + 5; //returns infinity
myInf*(-1); //returns negative infinity

저는 아주 많은 숫자를 사용하려고 노력했지만 적절하고 쉬운 해결책을 원합니다.

double

double inf = Double.POSITIVE_INFINITY;
System.out.println(inf + 5);
System.out.println(inf - inf); // same as Double.NaN
System.out.println(inf * -1); // same as Double.NEGATIVE_INFINITY

인쇄하다

Infinity
NaN
-Infinity

의:Infinity - Infinity번호가 아닙니다.

나는 네가 정수 수학을 사용하는 이유가 있다고 가정한다. POSITION_INFINITY의 수 .Integer 링크:

Integer myInf = Integer.MAX_VALUE;

MIN_VALUE를 할 수 INFINITY는 MIN_VALUE를 사용합니다). 비교하다, 하다, 기능적으로 수 있습니다. 예를 들어 비교 시myInf 이 는 MAX_VALUE보다.myInf또한 아래 코멘트에서 설명한 바와 같이 양의 무한대를 증가시키면 음수로 돌아갑니다(음수 무한대를 감소시키면 양의 무한대로 돌아갑니다).

POSITION_INFINITY 및 Negative_INFINITY 필드가 있는 라이브러리도 있지만 실제로는 MAX_VALUE 및 MIN_VALUE의 새로운 이름일 뿐입니다.

「」를 Infinity , 을 사용하면 .Double를 서포트하고 있습니다.Infinity: -

    System.out.println(Double.POSITIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY * -1);
    System.out.println(Double.NEGATIVE_INFINITY);

    System.out.println(Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY);
    System.out.println(Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY);

출력: -

Infinity
-Infinity
-Infinity

Infinity 
NaN

Double ★★★★★★★★★★★★★★★★★」Float에는 「」가 있습니다.POSITIVE_INFINITY★★★★★★★★★★★★★★★★★★.

Java가 모든 숫자 유형에 대해 무한대를 가지고 있는지 확실하지 않지만 일부 숫자 데이터 유형에 대해 답은 긍정적입니다.

Float.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY

또는

Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY

또한 +/- 무한대를 포함하는 수학 연산을 나타내는 다음 문서도 유용할 수 있습니다: Java 부동 소수점 숫자 복잡도.

및 됩니다.POSITIVE_INFINITY★★★★★★★★★★★★★★★★★★.

정수 무한도:

  Integer maxNumber = Integer.MAX_VALUE

더블 인피니티

  Double maxNumber = Double.MAX_VALUE;
  Double positiveInf = Double.POSITIVE_INFINITY;
  Double negativeInf = Double.NEGATIVE_INFINITY

플로트 무한대

   Float positiveInf = Float.POSITIVE_INFINITY;
   Float negativeInf = Float.NEGATIVE_INFINITY
   Float maxNumber = Float.MAX_VALUE;

일반적인 해결책은 새로운 유형을 도입하는 것입니다.더 많이 관여할 수도 있지만, 그 자체의 무한대를 정의하지 않는 어떤 유형에서도 작동할 수 있는 장점이 있습니다.

ifT 타입이 요.lteq있습니다.할 수 .InfiniteOr<T>lteq예를 들어 다음과 같습니다.

class InfiniteOr with type parameter T:
    field the_T of type null-or-an-actual-T
    isInfinite()
        return this.the_T == null
    getFinite():
        assert(!isInfinite());
        return this.the_T
    lteq(that)
        if that.isInfinite()
            return true
        if this.isInfinite()
            return false
        return this.getFinite().lteq(that.getFinite())

이것을 Java의 정확한 구문으로 번역하는 것은 당신에게 맡기겠습니다.나는 그 생각들이 명확하기를 바란다; 하지만 어쨌든 그것들을 자세히 설명하게 해주겠다.

아이디어는 이미 존재하는 유형과 모두 동일한 값을 가진 새로운 유형을 만드는 것입니다. 그리고 공공적인 방법을 통해 알 수 있는 한, 무한대가 원하는 방식으로 동작하는 하나의 특별한 값을 가지는 새로운 유형을 만드는 것입니다. 예를 들어, 다른 어떤 것보다 더 큰 것입니다.하고 null여기서 무한대를 나타내는 것은 자바에서 가장 간단해 보이기 때문입니다.

산술 연산을 추가하려면 연산 작업을 결정한 후 이를 구현합니다.무한 확장 사례를 먼저 처리한 후 원래 유형의 유한 값에 대해 기존 작업을 재사용하는 것이 가장 간단할 것입니다.

왼쪽 무한을 오른쪽 무한보다 먼저 처리하는 것이 좋은지 그렇지 않은지에 대한 일반적인 패턴이 있을 수 있습니다. 시도해 보지 않고는 알 수 없지만, 동등하지 않은 경우입니다.lteq오른쪽 무한대를 먼저 보는 것이 더 간단하다고 생각합니다.주의:lteq가환성은 없지만add그리고.mul관련이 있을지도 모릅니다.

주의: 무한대의 가치에서 일어나는 일에 대한 올바른 정의를 내리는 것이 항상 쉬운 것은 아닙니다.비교, 덧셈, 곱셈을 위한 것이지만 뺄셈을 위한 것은 아니다.또한 무한 기수와 서수 사이에는 유의해야 할 차이점이 있습니다.

숫자 래퍼 유형의 경우.

Double.POSITIVE_INFINITY

이게 도움이 되길 바라.

클래스 넘버가 최종이 아니기 때문에, 다른 투고에서는 아직 찾을 수 없는 아이디어가 있습니다.즉, 클래스 번호를 하위 분류합니다.

이 경우 Integer, Long, Double, Float, BigInteger 및 BigDecimal에 대해 무한으로 처리될 수 있는 개체가 제공됩니다.

값이 2개밖에 없기 때문에 싱글톤 패턴을 사용할 수 있습니다.

public final class Infinity extends Number {
    public final static Infinity POSITIVE = new Infinity(false);
    public final static Infinity NEGATIVE = new Infinity(true);
    private boolean negative;
    private Infinity(boolean n) {
        negative = n;
    }
}

나머지 메서드는 intValue(), longValue() 등이라고 생각합니다.그런 다음 예외를 발생시키기 위해 재정의해야 합니다.따라서 추가 주의사항 없이 무한대 값을 사용할 수 없습니다.

자바어 초보자인데...Java 문서에서 무한대를 위한 다른 구현을 찾았습니다.boolean그리고.doublehttps://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3 를 참조하십시오.

양의 0과 음의 0의 비교는 같습니다.따라서 식 0.0==-0.0의 결과는 참이고 0.0>-0.0의 결과는 거짓입니다.그러나 다른 연산에서는 양의 0과 음의 0을 구분할 수 있습니다. 예를 들어 1.0/0.0의 값은 양의 무한대이고 1.0/-0.0의 값은 음의 무한대입니다.

보기엔 못생겼지만 효과가 있어요.

public class Main {

    public static void main(String[] args) {
        System.out.println(1.0/0.0);
        System.out.println(-1.0/0.0);
    }

}

언급URL : https://stackoverflow.com/questions/12952024/how-to-implement-infinity-in-java

반응형