Skip to content

Commit 92aa2d7

Browse files
change version from 1.1.0 to 1.0.16, and...
- `HugeInt` division now tries to use native arithmetic to find result, resulting in a significant performance improvement when it can, otherwise it defaults back to the custom division logic
1 parent 91e37ce commit 92aa2d7

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

HugeNumbers.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'HugeNumbers'
3-
s.version = '1.1.0'
3+
s.version = '1.0.16'
44
s.summary = 'Very large numbers with infinite precision.'
55
s.homepage = 'https://github.com/RandomHashTags/swift_huge-numbers'
66
s.license = { :type => 'CC0 1.0 Universal', :file => 'LICENSE.txt' }

Sources/huge-numbers/HugeInt.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,9 +654,24 @@ public extension HugeInt {
654654
}
655655
internal extension HugeInt {
656656
static func divide(dividend: HugeInt, divisor: HugeInt) -> (quotient: HugeInt, remainder: HugeRemainder?) {
657+
if let dividend_number:UInt64 = dividend.to_int(), let divisor_number:UInt64 = divisor.to_int() {
658+
let result:UInt64 = dividend_number / divisor_number
659+
let remainder_number:UInt64 = dividend_number - (divisor_number * result)
660+
let remainder:HugeRemainder? = remainder_number != 0 ? HugeRemainder(dividend: HugeInt(remainder_number), divisor: divisor) : nil
661+
return (HugeInt(result), remainder)
662+
} else if let dividend_number:Int64 = dividend.to_int(), let divisor_number:Int64 = divisor.to_int() {
663+
let result:Int64 = dividend_number / divisor_number
664+
let remainder_number:Int64 = dividend_number - (divisor_number * result)
665+
let remainder:HugeRemainder? = remainder_number != 0 ? HugeRemainder(dividend: HugeInt(abs(remainder_number)), divisor: divisor) : nil
666+
return (HugeInt(result), remainder)
667+
}
657668
guard dividend >= divisor else {
658669
return (HugeInt.zero, HugeRemainder(dividend: dividend, divisor: divisor))
659670
}
671+
return divide_very_large_numbers(dividend: dividend, divisor: divisor)
672+
}
673+
674+
static func divide_very_large_numbers(dividend: HugeInt, divisor: HugeInt) -> (quotient: HugeInt, remainder: HugeRemainder?) {
660675
let is_negative:Bool = !(dividend.is_negative == divisor.is_negative)
661676

662677
var remaining_dividend:HugeInt = HugeInt(is_negative: false, dividend.numbers)

Tests/huge-numbersTests/huge_numbersTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ extension huge_numbersTests {
3636
//try await test_benchmark_integer_addition()
3737
//try await test_benchmark_integer_subtraction()
3838
//try await test_benchmark_integer_multiplication()
39-
//try await test_benchmark_integer_division()
39+
try await test_benchmark_integer_division()
4040

4141
//try await test_benchmark_float_addition()
4242
//try await test_benchmark_float_subtraction()
4343
//try await test_benchmark_float_multiplication()
44-
try await test_benchmark_float_division()
44+
//try await test_benchmark_float_division()
4545
}
4646
}
4747
@available(macOS 13.0, *)

0 commit comments

Comments
 (0)