, 당신은 scala.util.Try 각 계산을 둘러싸고, 그리고 각 결과를 변환 할 수있는 Option
:
import scala.util.Try
def solve(a: Double, b: Double, c: Double): Option[(Double, Double)] = {
val disc = b*b - 4 * a * c
val root1: Option[Double] = Try((-b + disc)/(2*a)).toOption
val root2: Option[Double] = Try((-b - disc)/(2*a)).toOption
// If both `root1` and `root2` are calculated successfully, return the tupled values.
for {
r1 <- root1
r2 <- root2
} yield {
(r1, r2)
}
}
우리는 값이 메서드를 호출 할 때
scala> solve(0,1,0)
res0: Option[(Double, Double)] = Some((NaN,-Infinity))
내가 왜 전혀 모르겠지만, 나는 그것이 Double
의 부정확성과 관련이있다 생각 : 0
, 1
및 0
, 우리는 뭔가 이상한 일이 알 수 있습니다. 다행히 누군가가 NaN
과 -Infinity
을 반환하는 이유에 대해 더 나은 대답으로 전화를 걸 수 있기를 바랍니다. 그러나 우리가 BigDecimal
와 Double
의 모든 항목을 대체 할 경우, 우리는 더 나은 정밀도를 얻을뿐만 아니라, 원하는 출력 :
다른 대답은 당신이해야 할 노력하고 추측하고있어 무엇의 일부를 포함
import scala.util.Try
def solve(a: BigDecimal, b: BigDecimal, c: BigDecimal): Option[(BigDecimal, BigDecimal)] = {
val disc = b*b - 4 * a * c
val root1: Option[BigDecimal] = Try((-b + disc)/(2*a)).toOption
val root2: Option[BigDecimal] = Try((-b - disc)/(2*a)).toOption
// If both `root1` and `root2` are calculated successfully, return the tupled values.
for {
r1 <- root1
r2 <- root2
} yield {
(r1, r2)
}
}
scala> solve(0,1,0)
res1: Option[(BigDecimal, BigDecimal)] = None
당신이 A'가 0 일 때'반환하려고하는거야? – Brian
@ 브라이언 분명히 무한 :) – prayagupd
@ 브라이언 나는'없음'을 추측하겠습니까? – Yawar