@@ -165,7 +165,7 @@ public struct HugeFloat : Hashable, Comparable, Codable {
165165
166166 /// Whether or not this huge float equals zero.
167167 public var is_zero : Bool {
168- return integer. is_zero && remainder == nil && ( decimal == nil || decimal!. value. is_zero)
168+ return integer. is_zero && ( remainder == nil || remainder! . is_zero ) && ( decimal == nil || decimal!. value. is_zero)
169169 }
170170
171171 /// Optimized version of multiplication when multiplying by 10. Using this function also respects the decimal and remainder.
@@ -236,7 +236,7 @@ public struct HugeFloat : Hashable, Comparable, Codable {
236236 public func to_radians( ) -> HugeFloat {
237237 return self * HugeFloat( " 0.01745329252 " )
238238 }
239- public func to_degrees( precision: HugeInt = HugeInt . default_precision) -> HugeFloat { // TODO: support trig arithemtic
239+ public func to_degrees( precision: HugeInt = HugeInt . default_precision) -> HugeFloat { // TODO: support trig arithmetic
240240 return self * ( 180 / HugeFloat. pi_100)
241241 }
242242}
@@ -261,14 +261,70 @@ public extension HugeFloat {
261261public extension HugeFloat {
262262 static func < ( left: HugeFloat , right: HugeFloat ) -> Bool {
263263 guard left. is_negative == right. is_negative else {
264- return left. is_negative && !right . is_negative
264+ return left. is_negative
265265 }
266- let left_pre_decimal_number : HugeInt = left. integer, right_pre_decimal_number : HugeInt = right. integer
267- return left_pre_decimal_number < right_pre_decimal_number || left_pre_decimal_number == right_pre_decimal_number && ( left. decimal? . is_less_than ( right. decimal) ?? left. remainder? . is_less_than ( right. remainder) ?? true )
266+ let left_integer : HugeInt = left. integer, right_integer : HugeInt = right. integer
267+ guard left_integer == right_integer else {
268+ return left_integer < right_integer
269+ }
270+ if left. decimal != nil || right. decimal != nil {
271+ return ( left. decimal ?? HugeDecimal . zero) . is_less_than ( right. decimal)
272+ } else if left. remainder != nil || right. remainder != nil {
273+ return ( left. remainder ?? HugeRemainder . zero) . is_less_than ( right. remainder)
274+ }
275+ return false
276+ }
277+ static func <= ( left: HugeFloat , right: HugeFloat ) -> Bool {
278+ guard left. is_negative == right. is_negative else {
279+ return left. is_negative
280+ }
281+ let left_integer : HugeInt = left. integer, right_integer : HugeInt = right. integer
282+ guard left_integer == right_integer else {
283+ return left_integer <= right_integer
284+ }
285+ if left. decimal != nil || right. decimal != nil {
286+ return ( left. decimal ?? HugeDecimal . zero) . is_less_than_or_equal_to ( right. decimal)
287+ } else if left. remainder != nil || right. remainder != nil {
288+ return ( left. remainder ?? HugeRemainder . zero) . is_less_than_or_equal_to ( right. remainder)
289+ }
290+ return true
291+ }
292+ }
293+ public extension HugeFloat {
294+ static func > ( left: HugeFloat , right: HugeFloat ) -> Bool {
295+ guard left. is_negative == right. is_negative else {
296+ return !left. is_negative
297+ }
298+ let left_integer : HugeInt = left. integer, right_integer : HugeInt = right. integer
299+ guard left_integer == right_integer else {
300+ return left_integer > right_integer
301+ }
302+ if left. decimal != nil || right. decimal != nil {
303+ return ( left. decimal ?? HugeDecimal . zero) . is_greater_than ( right. decimal)
304+ } else if left. remainder != nil || right. remainder != nil {
305+ return ( left. remainder ?? HugeRemainder . zero) . is_greater_than ( right. remainder)
306+ }
307+ return false
308+ }
309+
310+ static func >= ( left: HugeFloat , right: HugeFloat ) -> Bool {
311+ guard left. is_negative == right. is_negative else {
312+ return !left. is_negative
313+ }
314+ let left_integer : HugeInt = left. integer, right_integer : HugeInt = right. integer
315+ guard left_integer == right_integer else {
316+ return left_integer >= right_integer
317+ }
318+ if left. decimal != nil || right. decimal != nil {
319+ return ( left. decimal ?? HugeDecimal . zero) . is_greater_than_or_equal_to ( right. decimal)
320+ } else if left. remainder != nil || right. remainder != nil {
321+ return ( left. remainder ?? HugeRemainder . zero) . is_greater_than_or_equal_to ( right. remainder)
322+ }
323+ return true
268324 }
269325}
270326/*
271- prefixes
327+ prefixes / postfixes
272328 */
273329public extension HugeFloat {
274330 static prefix func - ( value: HugeFloat ) -> HugeFloat {
@@ -511,6 +567,10 @@ public extension HugeFloat {
511567 static func / ( left: any FloatingPoint , right: HugeFloat ) -> HugeFloat {
512568 return HugeFloat ( left) / right
513569 }
570+
571+ static func /= ( left: inout HugeFloat , right: HugeFloat ) {
572+ left = left / right
573+ }
514574}
515575internal extension HugeFloat {
516576 static func divide( left: HugeFloat , right: HugeFloat , precision: HugeInt ) -> HugeFloat {
0 commit comments