Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26).
scala> 1.0 / Double.MinPositiveValue
res0: Double = Infinity
おー。迷惑。私は次のようなことができることを望んでいました:
def f(x: Double) = 1.0 / (x + Double.MinPositiveValue)
...そして避けInfinity
てくださいf(0.0)
。少し大きい数を見つけてみましょう。
scala> val xs = Iterator.iterate(Double.MinPositiveValue)(_ + Double.MinPositiveValue)
xs: Iterator[Double] = non-empty iterator
scala> xs.take(10).toList
res1: List[Double] = List(4.9E-324, 1.0E-323, 1.5E-323, 2.0E-323, 2.5E-323, 3.0E-323, 3.5E-323, 4.0E-323, 4.4E-323, 4.9E-323)
わかった。良い。増えています。どうですか:
scala> xs.map(1.0 / _).take(10).toList
res2: List[Double] = List(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity)
うーん...多分それは時間がかかるだろう。やってみよう:
scala> xs.find(x => !(1.0 / x).isInfinite)
...そして私はまだこれを待っています。すぐに終了するようには見えません。
Double
無限の結果をもたらさない最小の除数を見つけるにはどうすればよいですか?