@@ -15,7 +15,7 @@ use Integer;
15
15
use std:: cmp;
16
16
use std:: fmt;
17
17
use std:: from_str:: FromStr ;
18
- use std:: num:: { Zero , One , ToStrRadix , FromStrRadix , Round } ;
18
+ use std:: num:: { Zero , One , ToStrRadix , FromStrRadix } ;
19
19
use bigint:: { BigInt , BigUint , Sign , Plus , Minus } ;
20
20
21
21
/// Represents the ratio between 2 numbers.
@@ -113,6 +113,40 @@ impl<T: Clone + Integer + Ord>
113
113
pub fn recip ( & self ) -> Ratio < T > {
114
114
Ratio :: new_raw ( self . denom . clone ( ) , self . numer . clone ( ) )
115
115
}
116
+
117
+ pub fn floor ( & self ) -> Ratio < T > {
118
+ if * self < Zero :: zero ( ) {
119
+ Ratio :: from_integer ( ( self . numer - self . denom + One :: one ( ) ) / self . denom )
120
+ } else {
121
+ Ratio :: from_integer ( self . numer / self . denom )
122
+ }
123
+ }
124
+
125
+ pub fn ceil ( & self ) -> Ratio < T > {
126
+ if * self < Zero :: zero ( ) {
127
+ Ratio :: from_integer ( self . numer / self . denom )
128
+ } else {
129
+ Ratio :: from_integer ( ( self . numer + self . denom - One :: one ( ) ) / self . denom )
130
+ }
131
+ }
132
+
133
+ #[ inline]
134
+ pub fn round ( & self ) -> Ratio < T > {
135
+ if * self < Zero :: zero ( ) {
136
+ Ratio :: from_integer ( ( self . numer - self . denom + One :: one ( ) ) / self . denom )
137
+ } else {
138
+ Ratio :: from_integer ( ( self . numer + self . denom - One :: one ( ) ) / self . denom )
139
+ }
140
+ }
141
+
142
+ #[ inline]
143
+ pub fn trunc ( & self ) -> Ratio < T > {
144
+ Ratio :: from_integer ( self . numer / self . denom )
145
+ }
146
+
147
+ pub fn fract ( & self ) -> Ratio < T > {
148
+ Ratio :: new_raw ( self . numer % self . denom , self . denom . clone ( ) )
149
+ }
116
150
}
117
151
118
152
impl Ratio < BigInt > {
@@ -238,45 +272,6 @@ impl<T: Clone + Integer + Ord>
238
272
impl < T : Clone + Integer + Ord >
239
273
Num for Ratio < T > { }
240
274
241
- /* Utils */
242
- impl < T : Clone + Integer + Ord >
243
- Round for Ratio < T > {
244
-
245
- fn floor ( & self ) -> Ratio < T > {
246
- if * self < Zero :: zero ( ) {
247
- Ratio :: from_integer ( ( self . numer - self . denom + One :: one ( ) ) / self . denom )
248
- } else {
249
- Ratio :: from_integer ( self . numer / self . denom )
250
- }
251
- }
252
-
253
- fn ceil ( & self ) -> Ratio < T > {
254
- if * self < Zero :: zero ( ) {
255
- Ratio :: from_integer ( self . numer / self . denom )
256
- } else {
257
- Ratio :: from_integer ( ( self . numer + self . denom - One :: one ( ) ) / self . denom )
258
- }
259
- }
260
-
261
- #[ inline]
262
- fn round ( & self ) -> Ratio < T > {
263
- if * self < Zero :: zero ( ) {
264
- Ratio :: from_integer ( ( self . numer - self . denom + One :: one ( ) ) / self . denom )
265
- } else {
266
- Ratio :: from_integer ( ( self . numer + self . denom - One :: one ( ) ) / self . denom )
267
- }
268
- }
269
-
270
- #[ inline]
271
- fn trunc ( & self ) -> Ratio < T > {
272
- Ratio :: from_integer ( self . numer / self . denom )
273
- }
274
-
275
- fn fract ( & self ) -> Ratio < T > {
276
- Ratio :: new_raw ( self . numer % self . denom , self . denom . clone ( ) )
277
- }
278
- }
279
-
280
275
/* String conversions */
281
276
impl < T : fmt:: Show > fmt:: Show for Ratio < T > {
282
277
/// Renders as `numer/denom`.
@@ -636,19 +631,19 @@ mod test {
636
631
637
632
// f32
638
633
test ( 3.14159265359f32 , ( "13176795" , "4194304" ) ) ;
639
- test ( 2f32 . powf ( & 100. ) , ( "1267650600228229401496703205376" , "1" ) ) ;
640
- test ( -2f32 . powf ( & 100. ) , ( "-1267650600228229401496703205376" , "1" ) ) ;
641
- test ( 1.0 / 2f32 . powf ( & 100. ) , ( "1" , "1267650600228229401496703205376" ) ) ;
634
+ test ( 2f32 . powf ( 100. ) , ( "1267650600228229401496703205376" , "1" ) ) ;
635
+ test ( -2f32 . powf ( 100. ) , ( "-1267650600228229401496703205376" , "1" ) ) ;
636
+ test ( 1.0 / 2f32 . powf ( 100. ) , ( "1" , "1267650600228229401496703205376" ) ) ;
642
637
test ( 684729.48391f32 , ( "1369459" , "2" ) ) ;
643
638
test ( -8573.5918555f32 , ( "-4389679" , "512" ) ) ;
644
639
645
640
// f64
646
641
test ( 3.14159265359f64 , ( "3537118876014453" , "1125899906842624" ) ) ;
647
- test ( 2f64 . powf ( & 100. ) , ( "1267650600228229401496703205376" , "1" ) ) ;
648
- test ( -2f64 . powf ( & 100. ) , ( "-1267650600228229401496703205376" , "1" ) ) ;
642
+ test ( 2f64 . powf ( 100. ) , ( "1267650600228229401496703205376" , "1" ) ) ;
643
+ test ( -2f64 . powf ( 100. ) , ( "-1267650600228229401496703205376" , "1" ) ) ;
649
644
test ( 684729.48391f64 , ( "367611342500051" , "536870912" ) ) ;
650
645
test ( -8573.5918555 , ( "-4713381968463931" , "549755813888" ) ) ;
651
- test ( 1.0 / 2f64 . powf ( & 100. ) , ( "1" , "1267650600228229401496703205376" ) ) ;
646
+ test ( 1.0 / 2f64 . powf ( 100. ) , ( "1" , "1267650600228229401496703205376" ) ) ;
652
647
}
653
648
654
649
#[ test]
0 commit comments