Умножение числа с большими числами, просто добавление чисел вместе - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь преобразовать значения с плавающей запятой в МБ, ГБ и ТБ в байты, но у меня возникают проблемы при умножении базового объема пространства (скажем, 500 ГБ) на большое значение для их преобразования.

Я считаю, что это ошибка типа данных, но я не могу понять это.Я попытался посмотреть на порядок продвижения, но следование этой логике, похоже, не сработало.Когда моя программа пытается умножить 500 * 10000000000, я получаю 1000000000499999997952.000000 (или что-то похожее в зависимости от типов переменных).

long factor = 10000000000;
float capacity = 500;
double result = capacity * factor;
fprint("%lf", result);

Она должна вывести 500000000000000, но вместо этого я получаю 1000000000499999997952.000000.Я не думаю, что типы переменных правильные, но, похоже, ничто из того, что я пробую, не поможет в этом.

1 Ответ

0 голосов
/ 31 января 2019
#include <stdio.h>

int main()
{
    unsigned long long factor = 10000000000;
    float capacity = 500.0f;
    double result = capacity * factor;
    double result1 = (double)capacity * factor;

    printf("result = %f\n result1 = %f\n", result, result1);

    return 0;
}

и результат

result = 4999999913984.000000
result1 = 5000000000000.000000 
...