Я ломаю голову, пытаясь понять, почему этот код не дает правильного результата. Я ищу шестнадцатеричные представления положительных и отрицательных уровней переполнения/понижения с плавающей запятой. Код базируется на этом сайте и Wikipedia entry:Код предельных значений с плавающей запятой не дает правильных результатов
7f7f FFFF ≈ 3.4028234 × 10 (макс одинарной точности) - от входа в википедии, соответствует положительному переполнению
Вот код:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
int main(void) {
float two = 2;
float twentyThree = 23;
float one27 = 127;
float one49 = 149;
float posOverflow, negOverflow, posUnderflow, negUnderflow;
posOverflow = two - (pow(two, -twentyThree) * pow(two, one27));
negOverflow = -(two - (pow(two, one27) * pow(two, one27)));
negUnderflow = -pow(two, -one49);
posUnderflow = pow(two, -one49);
cout << "Positive overflow occurs when value greater than: " << hex << *(int*)&posOverflow << endl;
cout << "Neg overflow occurs when value less than: " << hex << *(int*)&negOverflow << endl;
cout << "Positive underflow occurs when value greater than: " << hex << *(int*)&posUnderflow << endl;
cout << "Neg overflow occurs when value greater than: " << hex << *(int*)&negUnderflow << endl;
}
выход:
Положительное переполнение возникает, когда в LUE больше:
f3800000
переполнения отра происходит, когда значение меньше, чем: происходит7f800000
Положительного опустошение, когда значение больше: происходит1
переполнения отра, когда значение больше:80000001
Чтобы получить шестнадцатеричное представление с плавающей точкой , Я использую метод, описанный here:
Почему код не работает? Я знаю, что это сработает, если положительное переполнение = 7f7f ffff
.
Возможно, вы должны использовать 'double', а не' float'. –
@LokiAstari Вы не можете просто заменить 'double' на этот код, все соответствующие выражения должны будут измениться, поскольку они переполняются и переполняются с разными значениями. Кроме того, поскольку цель этого кода, по-видимому, является лучшим пониманием плавающей точки IEEE, я бы сказал, что 'float' - это именно то, что он должен использовать. –