#include <stdio.h>
#include <math.h>
/* converts to binary using logs */
int main()
{
long int decimalNUM = 0, binaryNUM = 0, exponentNUM = 0;
printf("Enter a number to be converted to binary.\t");
scanf("%ld", &decimalNUM);
fflush(stdin);
int origDEC = decimalNUM;
while (decimalNUM > 0)
{
exponentNUM = (log(decimalNUM))/(log(2));
binaryNUM += pow(10, exponentNUM);
decimalNUM -= pow(2, exponentNUM);
}
printf("\nBINARY FORM OF %ld is %ld", origDEC, binaryNUM);
getchar();
return binaryNUM;
}
如果STDIN为4,则返回99,而不应该返回99。在IDEONE上它返回100。为什么?
编辑似乎任何大于2的偶数都返回带有9的东西
最佳答案
诸如log之类的浮点运算并不精确。在我的机器上,此代码按预期运行(STDIN上的4表示100)。
您可以执行此操作的一种方法是,使用具有连续2的幂的mod(%)运算符。