From 051936c06e4350c773e87432d5e5a5b708691165 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Mon, 14 Feb 2022 10:31:51 +0100 Subject: [PATCH] transformation float en fixed par deplacement pa au point --- d02/ex01/Fixed.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++--- d02/ex01/fixed | Bin 14912 -> 19032 bytes d02/ex01/main.cpp | 7 ++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/d02/ex01/Fixed.cpp b/d02/ex01/Fixed.cpp index 63a5fa8..f94c568 100644 --- a/d02/ex01/Fixed.cpp +++ b/d02/ex01/Fixed.cpp @@ -10,12 +10,10 @@ std::string printBitsInt(int num) { int i = 0; - std::cout << " "; for (unsigned int mask = 1U << (sizeof(int) *8 -1); mask; mask >>= 1) { std::cout << ((num & mask) != 0); i++; -// if (i % 8 == 0 && i < 32) if (i == 1 || i == 9 || i == 24) std::cout << ' '; } @@ -31,7 +29,7 @@ std::string printBitsFloat(float num) { std::cout << ((*p & mask) != 0); i++; - if (i == 1 || i == 9) + if (i == 1 || i == 9 || i == 24) std::cout << ' '; } return ""; @@ -84,6 +82,7 @@ Fixed::Fixed(int integer) { } std::cout << "integer : " << printBitsInt(integer) << " (" << integer << ")\n"; this->_value = integer << this->_frac; + std::cout << "_value : " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; } Fixed::Fixed(float const floater) { @@ -95,6 +94,50 @@ Fixed::Fixed(float const floater) { return; } std::cout << "floater : " << printBitsFloat(floater) << " (" << floater << ")\n"; + this->_value = floater * (1 << this->_frac); + std::cout << "_value : " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; + + this->_value = *((int *)&floater); // cast floater into int +std::cout << "_value : " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; + + int sign = this->_value & (1 << 31); // set most left bits to sign +std::cout << "sign : " << printBitsInt(sign) << " (" << sign << ")\n"; + + int exponent = ((unsigned int)(this->_value << 1) >> 24) - 127; // extract exponent value +std::cout << "exponent: " << printBitsInt(exponent) << " (" << exponent << ")\n"; + + int decimal = (this->_value << (9)); +std::cout << "decimal : " << printBitsInt(decimal) << " (" << decimal << ")\n"; + decimal = (this->_value << (9 + exponent)); +std::cout << "decimal : " << printBitsInt(decimal) << " (" << decimal << ")\n"; + + int integer = (this->_value << 8) | (1 << 31); // add left 1 to integer part +std::cout << "left 1 : " << printBitsInt(integer) << " (" << integer << ")\n"; + if (sign != 0) + integer = ~integer; // reverse for negatif +std::cout << "reverse : " << printBitsInt(integer) << " (" << integer << ")\n"; + integer = ((unsigned int)integer >> 1) | sign; // add sign to integer part +std::cout << "left +/-: " << printBitsInt(integer) << " (" << integer << ")\n"; + integer >>= (30 - exponent); // extract integer part +std::cout << "integer : " << printBitsInt(integer) << " (" << integer << ")\n"; + +// this->_value = (unsigned int)(this->_value << 8); // shift to left to erase exponent part +// this->_value |= 1 << 31; // add the missing left 1 +//std::cout << "to left : " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; +// this->_value = (unsigned int)this->_value >> 1; +//std::cout << "to right: " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; +// this->_value |= sign; +//std::cout << "sign : " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; +// this->_value = this->_value >> (30 - exponent - this->_frac); // shift to right untill fixed point +//std::cout << "_value : " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; +//// int decimal = (unsigned int)(this->_value << (24)) >> 24; // extract decimal +////std::cout << "decimal : " << printBitsInt(decimal) << " (" << decimal << ")\n"; +// this->_value >>= this->_frac; +//std::cout << "int valu: " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; +//// this->_value += (unsigned int)sign >> 31; +////std::cout << "val sign: " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; +// this->_value = (this->_value << this->_frac); +//std::cout << "val sign: " << printBitsInt(this->_value) << " (" << this->_value << ")\n"; } diff --git a/d02/ex01/fixed b/d02/ex01/fixed index e147d71d8ce47e2e67c4aadf140c55419d201665..7171e14918b5127e3fa16a4723d188018b8c8dce 100755 GIT binary patch literal 19032 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 delta 5800 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 diff --git a/d02/ex01/main.cpp b/d02/ex01/main.cpp index 252cc46..78e4ce0 100644 --- a/d02/ex01/main.cpp +++ b/d02/ex01/main.cpp @@ -3,7 +3,12 @@ int main( void ) { - Fixed a(1105979538); +// Fixed a(1105979538); + Fixed a(1105979); + std::cout << '\n'; + Fixed b(1000.5979f); + std::cout << '\n'; + Fixed c(-1105.979f); // Fixed a; // Fixed const b( 10 );