I solved it!
Code:
#include <stdio.h>
main()
{
float fl, last, last_b, power;
double db, lastdb, lastdb_b, power_b;
fl = 0;
power = 1;
while (fl != last) {
last_b = last;
last = fl;
fl = fl + (power / 2);
power = power / 2;
}
while (last != last_b) {
last = last * 0.5;
last_b = last_b * 0.5;
}
printf("\nMinimum value of denormalized float variable: %e", last_b);
db = 0;
power_b = 1;
while (db != lastdb) {
lastdb_b = lastdb;
lastdb = db;
db = db + (power_b / 2);
power_b = power_b / 2;
}
while (lastdb != lastdb_b) {
lastdb = lastdb * 0.5;
lastdb_b = lastdb_b * 0.5;
}
printf("\nMinimum value of denormalized double variable: %e\n", lastdb_b);
return 0;
}
this prints:
Minimum value of denormalized float variable: 1.175494e-038
Minimum value of denormalized double variable: 2.225074e-308
(I didn't multiply with 2.f at the end, because somehow the compiler already produced the correct result)
Thanks to everyone who helped me.
This exercise was awesome!