Софтуерно Инженерство
Loading...
Curious avatar Curious 33 Точки

Би могъл да използваш функции като floor или ceiling и да провериш дали резултата е същият като оригиналното число.

Това би работило за повечето констатни float-ове, има проблем когато float-а, който проверяваш е резултат от някаква сметка

и се получи някакво разкръгление поради липса на точност. На пример,

float z = powf(powf(3.0f, 0.05f), 20.0f);

би трябвало да върне 3, (3 на степен 1/20, цялото повдигнато на 20-та степен), но резултатът поне на С е  2.9999992847442626953125, и ако изберем да го разкръглим към нулата, това би върнало 2. За да се справиш с този проблем, би могъл да определиш някаква константа, която представлява един вид "толеранс".

const float EPSILON = 0.00001;
float z = powf(powf(3.0f, 0.05f), 20.0f);

if(abs(z - 3) < EPSILON) {
    print("integer");
} else {
    print("not integer");
}

Тъй като не си предоставил контекстът, в който ще ползваш кода, не знам дали това би работило в твоят случай.

Аз се водех от https://stackoverflow.com/questions/5796983/checking-if-float-is-an-integer тази тема в stack overflow, също бих ти препоръчал да прегледаш страницата в уикипедия

https://en.wikipedia.org/wiki/Floating-point_arithmetic

П.С.: снипетът не е валиден С код.

0