Optimized division in BN

This commit is contained in:
Arthur Guiot
2020-05-24 13:20:59 -04:00
parent 75545ada80
commit a960a87d00
@@ -227,14 +227,14 @@ extension BigDouble {
//
/// Quick division (using defined precision by default for better performances)
public static func /(lhs: BigDouble, rhs: BigDouble) -> BigDouble {
let double_precision = BN.precision * 10 // While we limit the precision, we need something fine...
let double_precision = BN.precision + 10 // While we limit the precision, we need something fine...
var denominator = lhs.denominator.multiplyingBy(rhs.numerator)
var numerator = lhs.numerator.multiplyingBy(rhs.denominator)
let precision = (BigInt(10) ** double_precision).limbs
if !denominator.lessThan(precision) {
denominator = denominator.dividing(precision)
numerator = numerator.dividing(precision)
while !denominator.lessThan(precision) {
denominator = denominator.dividing([10])
numerator = numerator.dividing([10])
}
var res = BigDouble(
sign: lhs.sign != rhs.sign,