| 
					
				 | 
			
			
				@@ -21,31 +21,20 @@ Rational::Rational(int num1, int num2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Rational::Rational(float x) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const uint32_t bits = *(uint32_t*)(&x); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // First, obtain bitwise representation of the value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const uint32_t bitwiseRepr = *reinterpret_cast<uint32_t*>(&x); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const uint32_t signBit = bits >> 31; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const uint32_t exponentBits = (bits >> 23) & 0xff;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const uint32_t mantisBits = bits & 0x7fffff;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    uint32_t significand = (1u << 23u) | mantisBits; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // Extract sign, exponent and mantissa bits (as stored in memory) for convenience: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const uint32_t signBit = bitwiseRepr >> 31u; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const uint32_t expBits = (bitwiseRepr >> 23u) & 0xffu; // 8 bits set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const uint32_t mntsBits = bitwiseRepr & 0x7fffffu; // 23 bits set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // mask lowest 23 bits (mantissa) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    uint32_t significand = (1u << 23u) | mntsBits; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const int64_t sign = signBit ? -1 : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const int64_t signFactor = signBit ? -1 : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const int32_t exp = exponentBits - 127 - 23; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    static uint32_t smth = 1 << (uint32_t)(-exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const int32_t exp = expBits - 127 - 23; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    static uint32_t smth = 1u << static_cast<uint32_t>(-exp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(exp < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cout << signFactor * static_cast<int64_t>(significand) << '/' << smth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cout << signFactor * static_cast<int64_t>(significand * smth) << '/' << 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    num = signFactor * static_cast<int64_t>(significand); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cout << sign * (int64_t)(significand) << '/' << smth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    num = sign * (int64_t)(significand); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     denum = smth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     simple(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |