LINUX.ORG.RU

Задачка на Си


0

0

Суть такова: printf("%f",очень_большое_число) покажет число типа XeY, где X-число, Y-его степень. Надо чтобы вместо "e" были произвольные символы. Это мне надо для того чтобы сделать красивый вывод в TeX типа X_{Y}. У меня конечно есть мысли как это сделать, но может у кого найдется более изящное решение?

оно вроде как жёстко в libc зашито, так что придётся на sed ещё пускать.

anonymous
()
Ответ на: комментарий от anonymous

Не, ну а если математически по мыслить. Ведь эта степень появляется после превышения какого-то числа. Значит, остается узнать степень которая осталась после разницы с этим числом превышения. А вообще конечно, хорошо было бы чего-нибудь придумать. Очень нада!

anterior
() автор топика
Ответ на: комментарий от kondor

Вариант, но плохой. Охота только числами работать Ж) Если больше ни у кого мыслей не будет, и у меня тоже, придется использовать именно этот вариант :(

anterior
() автор топика

Могу подсказать направление в котором можно покопать: от локали зависит например знак разделителя - точка или запятая. Можно предположить, что буква e не жёстко зашита а тоже где то там задаётся. А может и не задаётся :)

anonymous
()
Ответ на: комментарий от anonymous

> Могу подсказать направление в котором можно покопать: от локали зависит например знак разделителя - точка или запятая. Можно предположить, что буква e не жёстко зашита а тоже где то там задаётся. А может и не задаётся :)

Есть мнение, что буква e - это стандарт Си :-)

Anoxemian ★★★★★
()

#include <stdio.h>

int main(int argc, char** argv)
{
double c = 189324432.345435;
int i = 1;
int num = 0;
while (i < c) {
i *= 10;
++num;
}
printf("%g ~ {%g}^{%d}", c, c/i*10, num-1);

return 0;
}

Это пока рабочий вариант :) Короче вспоминаю, не могу вспомнить как число целых цифр в числе подсчитать по нормальному. Цикл с умножением как у меня это наверное плохой вариант

anterior
() автор топика
Ответ на: комментарий от anterior

Блин он только с плюсом у меня считал, а вот более универсальный:
#include <stdio.h>
#include <math.h>

int main(int argc, char** argv)
{
double c = -189324432.345435;
int i = 1;
int num = 0;
double d = fabs(c);
while (i < d) {
i *= 10;
++num;
}
printf("%g ~ {%g}^{%d}", c, c/i*10, num-1);

return 0;
}

Думаю как упростить...

anterior
() автор топика
Ответ на: комментарий от anterior

> как число целых цифр в числе подсчитать

потолок десятичного логарифма (+-1) но не факт, что будет быстрее, чем цикл.

Legioner ★★★★★
()
Ответ на: комментарий от anterior

void print_value(FILE* f, double value) { int sign=1, expon; double m; if (value < 0) { value = -value; sign = -1; } expon = log10(value); m = value / pow(10, expon); if (m < 1) { m *= 10; expon--; } printf("%f * 10^%d", m*sign, expon); }

anonymous
()
Ответ на: комментарий от anonymous

Примногая благодарность! Оно работает!!! :)

anterior
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.