Daha hızlı bir BigInt
uygulaması yapıyorum ve temel platform ile birlikte çalışma sağlamak için ne kadar ileri gitmem gerektiğinden emin değilim. Ben bir Java tipi sarma olmadığım içinYansıma kullanarak java.math.BigInteger ile kullanırken hangi sorunları beklemeliyim?
class BigInt(val bigInteger: BigInteger) ...
, ben
final class BigInt private(final val signum: Int,
final private[math] val arr: Array[Int])
def bigInteger: java.math.BigInteger = {
// Avoid copying of potentially large arrays.
val ctor = classOf[java.math.BigInteger]
.getDeclaredConstructor(classOf[Array[Int]], classOf[Int])
ctor setAccessible true
ctor.newInstance(arr, signum.asInstanceOf[Object])
}
...
}
böyle bir şey yapmak zorunda kalacak:
Bugün BigInt
sadece BigInteger
ve değer bigInteger
sadece sarılı değeri döndürür sarar
Bu sorun yaratır mı, yoksa daha iyi bir yolu var mı? Genelde
Numara ne kadar büyük olduğunu bilmiyorum, ancak küçük bir init dizisini kopyalamak yansıma kullanmaktan daha hızlı olabilir ... – paradigmatic
Evet, tabi. Küçük diziler için önemli değildir, ancak sayıların boyutu sadece RAM tarafından sınırlandırılmıştır. Verileri değişmez bir veri yapısından diğerine aktarırken sadece bellek yemek istemiyorum. – soc
Bütün evrende bulunan atomların sayısının genellikle 10^80 olduğu tahmin edilmektedir. Sadece 9 * 32 bit ile, her birine benzersiz bir dizin atayabilirsiniz. Bundan daha büyük bir doğal sayıya ihtiyacınız varsa, muhtemelen bir hata ya da tasarım hatası olduğuna inanıyoruz ... – paradigmatic