Scalacheckがあなたのためになるかもしれません。短いサンプルは次のとおりです。
cat DoubleSpecification.scala
import org.scalacheck._
object DoubleSpecification extends Properties ("Doubles") {
/*
(a/1000 + b/1000) = (a+b)/1000
(a/x + b/x ) = (a+b)/x
*/
property ("distributive") = Prop.forAll { (a: Int, b: Int, c: Int) =>
(c == 0 || a*1.0/c + b*1.0/c == (a+b) * 1.0/c) }
}
object Runner {
def main (args: Array[String]) {
DoubleSpecification.check
println ("...done")
}
}
実行するには、scalaとschalacheck-jarが必要です。テストが失敗した場合
scalac -cp /opt/scala/lib/scalacheck.jar:. DoubleSpecification.scala
scala -cp /opt/scala/lib/scalacheck.jar:. DoubleSpecification
! Doubles.distributive: Falsified after 6 passed tests.
> ARG_0: 28 (orig arg: 1030341)
> ARG_1: 9 (orig arg: 2147483647)
> ARG_2: 5
Scalacheckがで、いくつかのランダムな値(ORIG引数)を受け取り、これらを単純化しようとします:私は(私はあなたのc-パスが変化すること、言うことはありません)バージョン2.8を使用しました簡単な例を見つけるために
"rouding errors"の部分で[this ibm site](http://www.ibm.com/developerworks/java/library/j-jtp0114/)を参照してください。基本的に、負の指数でバイナリとして表現できないいくつかの数値を生成する必要があります。例えば、0.5 = 2^-1であるが、0.1はそうではない。この[site](http://www.intel.com/standards/floatingpoint.pdf)もまた、それに関する良い理論を示しています。そして、丸め問題のためにJavaクラッシュを起こしたいと思っています。[このサイトを見てください](http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/)番号2.2250738585072012e-308、 – woliveirajr