MIPI_BaseC_WebinarFRTK/26_Seminar13/27_Microcontrollers/2_2_float.c

59 lines
1.2 KiB
C
Raw Normal View History

2024-11-14 08:39:22 +03:00
//~ 2. Прочесть из потока ввода число типа float и затем вывести его на экран в формате a*2\^b,
//~ где a и b — десятичные числа, причём а в диапазоне от [0,1; 1).
//~ Возможное решение: float.c. думал спервадать задачу на полноценный вывод, но сложновато получится на мой взгляд.
//~ Пример решения: float.c
#include <stdio.h>
#include <stdint.h>
int main ()
{
float a=0;
uint32_t* pa = (uint32_t*)&a;
int o=0;
scanf("%f", &a);
if(a<0)
{
putchar('-');
}
float m_f = (*pa & 0x7FFFFF ) / (float)0x800000 ;
o = (((*pa) >> 23) & 0xFF) - 127 ;
putchar ('1');
putchar (',');
for (int i = 0; i < 9; i++)
{
m_f*=10;
putchar ('0'+ m_f);
m_f = m_f - (int)m_f;
}
putchar ('*');
putchar ('2');
putchar ('^');
if(o<0)
{
putchar ('-');
o=-o;
}
if ( o >= 100)
{
putchar ('1');
o%=100;
}
if(o>=10)
{
putchar('0' + o/10);
o%=10;
}
putchar('0' + o);
return 0;
}