숫자가 소수인지 아닌지 테스트하는 메서드를 작성했습니다. 사용자가 입력 할 수있는 숫자의 범위를 최대화하기 위해 double을 사용하려고했습니다. 문제는 40 자리 정도의 매우 큰 소수를 테스트 한 후 내 메소드가 false를 반환한다는 것입니다. (이미 int 버전으로 로직을 테스트했으며, 가능한 한 잘 작동합니다). 나는 그것이 매우 높은 숫자에서 작동하지 않는 이유 때문에 정확성 오류입니다 알고이중 산술에서 innaccuracy 다루는가?
public static boolean isPrime(double number) {
double sqrt = Math.sqrt(number);
for(double i = 2; i<= sqrt; i++) {
if(number%i == 0) {
return false;
}
}
하지만,이 문제가 : 여기 내 코드?
BigDecimal을 사용해 보셨습니까? – PillHead
이상 [BigInteger] (https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html). – vanje
왜 double이 소수인지 확인 하시겠습니까? 소수는 필수적이어야합니다. sqrt는 가능한 가장 높은 요소의 상한을 설정하기 위해서만 필요합니다. – StuartLC