2012-04-03 3 views
1

Java에서 RSA 공격을 구현하려고하는데 floor 및 ceil과 같은 수학 연산을 BigInteger 변수로 계산해야합니다. math.ceil과 math.floor가 double 변수에만 적용된다는 것을 알고 있듯이 BigIntegers의 floor와 ceil을 계산할 수있는 다른 방법을 알고 있습니까? 고맙습니다.Java : BigInteger 바닥 및 천장 함수

+1

그래서 public static BigInteger floor (BigInteger x) {return x; } ','ceil '도 마찬가지입니까? – maerics

+0

음 ... "Big ** Integer **"를 반환 하시겠습니까? – Mysticial

답변

2

질문은 의미가 없습니다. floor와 ceil은 부동 소수점을 정수로 반올림합니다. 그리고 추측 : BigInteger는 정수 만 나타낼 수 있습니다. 따라서 반올림은 필요하지 않습니다. (RSA 문맥은 정수 문자를 강조한다).

2

BigInteger 값은 정수이므로 나누기 연산의 천장과 바닥을 원한다고 가정합니다. 이를 위해서는 대신 BigDecimal을 사용하는 것이 좋습니다. 그것은 다른 BigDecimal과 MathContext을 취하는 divide 메소드를 가지고 있습니다. MathContext에서는 반올림 모드를 천장이나 바닥으로 지정할 수 있습니다.

0으로 반올림해야하는 경우 BigDecimal.divideToIntegralValue을 사용할 수도 있습니다.

+0

그러나 반올림 모드는 결과에 아무런 영향을 미치지 않습니다. 대신에,'BigDecimal.divide (other, RoundingMode.FLOOR)'를 사용하십시오. – Adam

+0

@codeparkle - 예, 'MathContext'가 아닌 반올림 모드를 직접 지정할 수 있습니다. 그러나, 나는 영향을 미치지 않는'MathContext'에서 반올림 모드에 대한 당신의 요지를 이해하지 못합니다. [divide (BigDecimal, MathContext)의 문서] (http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#divide%28java.math.BigDecimal,% 20java.math.MathContext % 29) : _ "값이 (this/divisor) 인 BigDecimal을 컨텍스트 설정에 따라 반올림하여 반환합니다."_ –

+0

답변은 'divideToIntegralValue' 메서드를 참조합니다. 반올림 모드를 완전히 무시하고 결과를 항상 자릅니다. – Adam