Почему эта программа выводит разные ответы при использовании чисел с плавающей точкой и целых? - PullRequest
0 голосов
/ 21 февраля 2012

Я сделал программу, которая найдет факториал числа. Но для целочисленного типа данных ответ до 12, а для числа с плавающей точкой - 13. Но размер как целого, так и числа с плавающей точкой равен 32. Почему я вижу разные ответы?

#include<stdio.h>
int main()
{
    int n,i=1,fact=1;


    scanf("%d",&n);
    while(i<=n)
    {
        fact=fact*i;
        i=i+1;
    }
    printf("fact is %d\n",fact);
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Я думаю, что проблема заключается в том, что когда вы использовали float, вы не меняли scanf и, таким образом, пытались прочитать целочисленное представление в переменную с плавающей запятой, так как они имеют тот же размер, что и подойдет, но, как справедливо указывает Дэвидиз них они используют 32 бита совершенно по-разному.

Если вы правильно прочитаете значение в Float, ответ будет таким же.

Вам также нужно будет изменить printf.

0 голосов
/ 21 февраля 2012

Это два совершенно разных представления чисел. Нет оснований ожидать, что они будут одинаковыми. Они дают разные ответы, потому что они совершенно разные.

Арабские цифры могут насчитывать до 999 в трех местах. Римские цифры не могут считаться после III. Почему разница? Что ж, потому что две системы счисления - это совершенно разные способы представления чисел и использование одного и того же количества пространства совершенно разными способами.

...