Сообщение Re: Подскажите, как отформатировать float/double от 27.04.2025 15:23
Изменено 27.04.2025 18:38 kov_serg
Re: Подскажите, как отформатировать float/double
Здравствуйте, Marty, Вы писали:
M>Накидайте ещё идей, как это сделать попроще?
Фрагмент древнего говнокода из старого dsp-шника, (там штататный printf слишком много памяти в стеке жрал).
Поэтому был сгорожен printf с блекждежом и шахматистками. Вот самая мяготь
В общем случае не самый эффективный алгоритм, можно использовать более эффективный логарифм, но оно работало вроде нормально.
M>Накидайте ещё идей, как это сделать попроще?
Фрагмент древнего говнокода из старого dsp-шника, (там штататный printf слишком много памяти в стеке жрал).
Поэтому был сгорожен printf с блекждежом и шахматистками. Вот самая мяготь

не для слабонервных | |
| |
#include <stdio.h>
void stdout_wc(void*,char c) { putc(c,stdout); }
int main(int argc, char const *argv[]) {
double nan=sqrt(-1), inf=1e300; inf*=inf; double x=M_PI;
int flg=fmt_flg_ralign|fmt_flg_upper;
istrfmt_f(x,10,4,flg,stdout_wc,0); printf(" %10.4f\n",x);
istrfmt_e(x,10,4,flg,stdout_wc,0); printf(" %10.4e\n",x);
istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
printf("---\n");
x=inf; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=-inf; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=nan; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=0; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=-x; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
return 0;
}
3.1416 3.1416
3.1416E+00 3.1416e+00
3.142 3.142
---
+INF inf
-INF -inf
NAN -nan
0 0
-0 -0
Re: Подскажите, как отформатировать float/double
Здравствуйте, Marty, Вы писали:
M>Накидайте ещё идей, как это сделать попроще?
Фрагмент древнего говнокода из старого dsp-шника, (там штататный printf слишком много памяти в стеке жрал).
Поэтому был сгорожен printf с блекждежом и шахматистками. Вот самая мяготь
В общем случае не самый эффективный алгоритм, можно использовать более эффективный логарифм, но оно работало вроде нормально.
M>Накидайте ещё идей, как это сделать попроще?
Фрагмент древнего говнокода из старого dsp-шника, (там штататный printf слишком много памяти в стеке жрал).
Поэтому был сгорожен printf с блекждежом и шахматистками. Вот самая мяготь

не для слабонервных | |
| |
#include <stdio.h>
void stdout_wc(void*,char c) { putc(c,stdout); }
int main(int argc, char const *argv[]) {
double nan=sqrt(-1), inf=1e300; inf*=inf; double x=M_PI;
int flg=fmt_flg_ralign|fmt_flg_upper;
istrfmt_f(x,10,4,flg,stdout_wc,0); printf(" %10.4f\n",x);
istrfmt_e(x,10,4,flg,stdout_wc,0); printf(" %10.4e\n",x);
istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
printf("---\n");
x=inf; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=-inf; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=nan; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=0; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
x=-x; istrfmt_g(x,10,4,flg,stdout_wc,0); printf(" %10.4g\n",x);
return 0;
}
3.1416 3.1416
3.1416E+00 3.1416e+00
3.142 3.142
---
+INF inf
-INF -inf
NAN -nan
0 0
-0 -0