Учитывайте это
while (integer <= *x-1)
{
integer++;
}
*x-=integer;
Для больших значений x
это будет мучительно медленно. Наихудший случай (, если вышеприведенное работает как задумано ) будет с максимальным значением ~ 1e38. Допустим, ваш компьютер может выполнять миллиард итераций цикла в секунду. Время выполнения составит ~ 1e29 секунд.
Однако вышеприведенное не будет работать так, как задумано. Для любого значения x
больше чем ~ 1.6e7 пределы точности с плавающей запятой одинарной точности означают, что единица в последнем месте (ULP) больше, чем 1.0f. Конкретно это означает, что для значений, превышающих около 16 миллионов, оператор приращения ничего не делает. В результате цикл while
никогда не завершится.
Как сказано в комментариях, рассмотрите возможность использования стандартных функций. В противном случае я предлагаю вам выделить знак мантиссы и показатели степени float
.