2014-01-30 7 views
0
내가 오류를 얻고있다

요구하는 시험 범위 오류내부 오류 : 많은 수의

def perfect_square(i) 
    a = Math.sqrt(5*(i**2)+4) 
    b = Math.sqrt(5*(i**2)-4) 

    ac = a.ceil 
    bc = b.ceil 

    if a**2 == ac**2 || b**2 == bc**2 
    true 
    else 
    false 
    end 
end 

puts perfect_square(927372692193078999171) 

내가 오류를 가정하고 있기 때문에이 예 i에 정말 큰 숫자이며 따라서 메서드가 처리 할 수없는 것입니다? 내 모든 다른 테스트 (아래)가 사실로 돌아오고 있으므로 왜 위의 테스트가 작동하지 않는지 잘 모르겠습니다.

perfect_square(2)  #=> true 
perfect_square(10946) #=> true 
perfect_square(6765+100) #=> false 
+1

해당 번호로 프로그램을 실행하면 오류가 발생하지 않습니다. 그리고'is_fibonacci? '예제는 무엇입니까? – lurker

+0

'is_fibonacci?'라는게 뭐지? 질문 끝나고 코멘트없이 던져 준 전화? :) 아마도 호출 스택 오류가 발생합니다. – Matt

+2

'is_fibonacci? '라고 쓰셨습니까? 재귀 구현을 사용 했습니까? 당신은 당신의 구현으로 스택을 날려 버렸다. –

답변

0

문제점이 무엇인지 알아 냈습니다. 방금 작동하도록 'bigdecimal'을 요구하고 bigdecimal을 사용하는 몇 가지 메소드를 수정해야합니다.

require 'bigdecimal' 

def perfect_square(i) 

    i = BigDecimal.new(i) #creates a object for bigdecimals 

    a= (5*(i**2) +4).sqrt(0) #sqrt method for big decimal 
    b= (5*(i**2) -4).sqrt(0) #sqrt method for big decimal 
    return (a == a.round || b == b.round) #boolean 
end