aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bits.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/bits.c b/bits.c
index bf437f0..40355a2 100644
--- a/bits.c
+++ b/bits.c
@@ -232,7 +232,25 @@ unsigned float_i2f(int x) {
* Difficulty: 4
*/
unsigned floatScale2(unsigned uf) {
- return 2;
+ unsigned sign;
+ unsigned exp;
+
+ sign = uf & 0x80000000;
+ exp = uf & 0x7F800000;
+
+ if (exp == 0x7F800000) {
+ return uf;
+ }
+
+ if (exp == 0) {
+ return sign | ((uf & 0x7FFFFFFF) << 1);
+ }
+
+ if (exp == 0x7F000000) {
+ return sign | 0x7F800000;
+ }
+
+ return uf + 0x00800000;
}
/*