ok Zrobiem precision(6) i troche poprawilo sprawe ale po pewnym czasie wszystko wrocilo do poprzedniego stany:
tu napisze kod i co wypisuje mi program:
kod:
/* Program to converter floating number to hexadecimal code */
#include <iostream>
#include <cmath>
#include <iomanip>
void printfloat(float);
int main()
{
float number = 0.0;
int how_many_step = 0;
std::cin >> how_many_step;
while (how_many_step > 0)
{
std::cin >> number;
printfloat( number );
--how_many_step;
}
return 0;
}
void printfloat(float n)
{
std::string s_intiger_part;
std::string s_decimal_part;
std::string final_binary;
int binary_intiger[8] {};
int binary_decimal[8] {};
float intiger_part = 0.0; //czesc calkowita
float decimal_part = 0.0; //czesc ulamkowa
decimal_part = std::modf( n , &intiger_part );
std::cout << "czesc calkowita" << intiger_part << " czesc ulamkowa " << decimal_part << std::endl;
int intiger_number = intiger_part;
int index = 0;
do
{
if( intiger_number % 2 == 0 )
{
std::cout << "mod 0" << std::endl;
s_intiger_part += std::to_string(0);
intiger_number /= 2;
if ( intiger_number == 1 )
++index;
}
if ( intiger_number % 2 == 1)
{
std::cout << "mod 1" << std::endl;
s_intiger_part += std::to_string(1);
intiger_number /= 2;
if ( intiger_number == 1 )
++index;
}
}
while ( index != 1 );
for ( int i = s_intiger_part.size() ; i >= 0 ; --i )
{
std::cout << "dana liczba: " << s_intiger_part[i] << std::endl;
final_binary += s_intiger_part[i];
}
final_binary += ".";
index = 0;
std::cout << "liczba: " << intiger_part << " w binarnym to: " << s_intiger_part << std::endl;
std::cout << "liczba: " << intiger_part << " w binarnym to: " << final_binary << std::endl;
intiger_number = 0;
float decimal = decimal_part;
do
{
decimal *= 2.0;
std::cout.setf(std::ios::basefield , std::ios::fixed );
std::cout.precision(4);
std::cout << "decimal: " << decimal << std::endl;
std::cout << "binarka: " << s_decimal_part << std::endl;
if ( decimal > 1 )
{
s_decimal_part += std::to_string(1);
decimal -= 1;
}
else if ( decimal > 0 && decimal < 1 )
s_decimal_part += std::to_string(0);
else if ( decimal == 1 || decimal == 0 )
{
if ( decimal == 1 )
s_decimal_part += std::to_string(1);
else if ( decimal == 0 )
s_decimal_part += std::to_string(0);
++index;
}
std::cout << "binarka: " << s_decimal_part << std::endl;
}
while ( index != 1 );
std::cout << "czesc ulamkowa: " << decimal_part << " w binarnym to: " << s_decimal_part << std::endl;
}
a tu to co mi oblicza program:
4
5.2
czesc calkowita5 czesc ulamkowa 0.2
mod 1
mod 0
mod 1
dana liczba:
dana liczba: 1
dana liczba: 0
dana liczba: 1
liczba: 5 w binarnym to: 101
liczba: 5 w binarnym to: 101.
decimal: 0.4
binarka:
binarka: 0
decimal: 0.8
binarka: 0
binarka: 00
decimal: 1.6
binarka: 00
binarka: 001
decimal: 1.2
binarka: 001
binarka: 0011
decimal: 0.4
binarka: 0011
binarka: 00110
decimal: 0.8
binarka: 00110
binarka: 001100
decimal: 1.6
binarka: 001100
binarka: 0011001
decimal: 1.2
binarka: 0011001
binarka: 00110011
decimal: 0.3999
binarka: 00110011
binarka: 001100110
decimal: 0.7998
binarka: 001100110
binarka: 0011001100
decimal: 1.6
binarka: 0011001100
binarka: 00110011001
decimal: 1.199
binarka: 00110011001
binarka: 001100110011
decimal: 0.3984
binarka: 001100110011
binarka: 0011001100110
decimal: 0.7969
binarka: 0011001100110
binarka: 00110011001100
decimal: 1.594
binarka: 00110011001100
binarka: 001100110011001
decimal: 1.188
binarka: 001100110011001
binarka: 0011001100110011
decimal: 0.375
binarka: 0011001100110011
binarka: 00110011001100110
decimal: 0.75
binarka: 00110011001100110
binarka: 001100110011001100
decimal: 1.5
binarka: 001100110011001100
binarka: 0011001100110011001
decimal: 1
binarka: 0011001100110011001
binarka: 00110011001100110011
czesc ulamkowa: 0.2 w binarnym to: 00110011001100110011