Python3 и C разные результаты математического деления

1

У меня простое деление числа. У меня есть два числа:

  • 39,654
  • 8.381903173E-8

Итак, если я делаю разделение на C:

// ...
float ii = 39.654;
double bb = 8.381903173E-8;
printf("\n%.20f\n", ii/bb);
// ... 

Выход: 473090639.56200009584426879883

Но, если я работаю над Python3:

39.654/8.381903173E-8

Выход: 473090647.5719557

Если я использую калькулятор, действительно, истинным значением является значение Python3

Что не так с моим C-кодом?

Спасибо! С уважением!

  • 2
    Возможно связано: stackoverflow.com/questions/13542944/…
  • 1
    Значения одинарной точности могут представлять только очень много мест, прежде чем они сломаются. Здесь вы находитесь на пределе со значениями> 1e9, где будет много приближений за пределами ~ 8 мест, поскольку есть только 23 бита для представления фактической числовой части. Используйте float только если вы хотите пожертвовать точностью, чтобы повысить производительность, что часто необходимо при выполнении 3D-математики в реальном времени.
Теги:

1 ответ

9
Лучший ответ

Вы должны сравнить яблоки с яблоками. В Python все переменные с плавающей запятой имеют тип double, поэтому вы должны использовать один и тот же тип данных в своей программе на C:

double ii = 39.654;
double bb = 8.381903173E-8;
printf("\n%.20f\n", ii/bb);
  • 0
    Рассмотрим ii как float и bb как double . Когда мы делаем ii/bb разве не должно быть повышено значение ii для этой операции?
  • 4
    @dodobhoot Это будет продвигаться. Но его первоначальная точность (и ценность) будет точностью float .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню