Как я могу преобразовать экспоненциальные форматы в десятичный формат в с - PullRequest
0 голосов
/ 22 декабря 2009

Я хотел бы преобразовать экспоненциальное число 5.52794e + 15.

Ответы [ 4 ]

2 голосов
/ 22 декабря 2009

Альтернатива: вы хотите напечатать его как целое число.

double d = 5.52794e+15;
printf("%15.0lf\n",d );

Дает:

5527940000000000
2 голосов
/ 22 декабря 2009

Это не поместится в int, но long long подойдет:

long long x = 5.52794e+15;
1 голос
/ 22 декабря 2009

Помимо использования длинных длин, вы также можете:

Используйте упакованную десятичную библиотеку.

Вы можете использовать логарифмическое (или геометрическое и т. Д.) Масштабирование в стандартном int или long.

Используйте структуру целых чисел, представляющих значения и экспоненты, и выполняйте математические вычисления с плавающей запятой вручную (или с хорошей библиотекой).

Я использовал все три метода, у каждого из них есть свои взлеты и падения. Упакованный десятичный знак самый медленный и самый точный. Логарифмическое масштабирование является самым быстрым и простым в реализации и наименее точным. Воспроизведение с плавающей запятой через целые числа является промежуточным по производительности, по сути, таким же по точности, как и «реальная» с плавающей запятой, и сложнее всего реализовать.

Все 3 медленнее, чем использование аппаратного обеспечения с плавающей запятой, при условии, что ваше оборудование имеет плавающую точку!

0 голосов
/ 22 декабря 2009

длинный длинный x = 5,52794e + 15; где показатель степени «15» должен быть целым числом, а коэффициент 5,52794 - любым действительным числом или даже целым числом. Максимальное значение мантиссы составляет чуть более 32 000 000. Любое значение выше этого значения будет усечено. Это становится значительным, если у вас есть промежуточный итог, вы добавляете небольшие значения и сохраняете точный итог. - например, энергопотребление, когда добавляемое вами значение не является целым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...