#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(%)运算符。

07-25 22:58