Problema con programa c para binario en decimales

Iniciado por alexisrojas, 12 Junio 2016, 18:08 PM

0 Miembros y 1 Visitante están viendo este tema.

alexisrojas

tengo que crear una clase que me convierta un numero decimal como 0,012 o 12,8830 en binarios ya solo encuentro programas cambien la forma entera en binario pero no lo decimales  tengo la formula para convertir estos decimales en binario pero me da error al intentar pasarla a C
este es un ejemplo
cuando decimal llega 0.0 se termina la función si es periódico solo se indica la parte periódica

R=0.75                   

2R=1.5                                 D1=1                                                            F1=0.5
(se multiplica R                (se toma la parte entera                                  (se toma la parte decimal
por dos)                             de R )                                                               de R)

2F=1.0                                D2=1                                                              F2=0.0
(F1 se multiplica                 (se toma la parte entera de                          (la parte decimal de F1)
por dos                                 F!)

0.75 =0,11

ayuda por favor  :(

do-while

#1
¡Buenas!

Por lo que cuentas, en la parte decimal tienes dos problemas, extraer los decimales y decidir si hay un periodo. La primera parte es fácil, después de multiplicar por dos la parte decimal solo tienes que quedarte con la parte entera y restársela al número que has obtenido al multiplicar por dos antes de volver a iterar. Lo de decidir si es periódico o no... en base diez y sobre papel es fácil XD, pero realizando los cálculos con ordenador y teniendo en cuenta que tienes que convertirlo a base dos... busca en algún libro de matemática discreta o de teoría de números. Date cuenta de que no solo existen números con un número finito de decimales o con un periodo, sino que también tienes números irracionales con una cantidad infinita de decimales sin ningún tipo de patrón periódico.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

geeke

Cita de: alexisrojas en 12 Junio 2016, 18:08 PM
solo encuentro programas cambien la forma entera en binario pero no lo decimales 

Te ofrezco una aproximación en C, el cual interpreta un float como un entero usando una union para luego procesar e imprimir cada bit

#include <stdio.h>
#include <limits.h>

int main()
{
    size_t i;
    unsigned msb = 1U << (sizeof(unsigned) * CHAR_BIT - 1);

    typedef union
    {
        float f;
        unsigned u;
    } type;

    type num;
    num.f = 12.8830;

    for (i = 0; i < sizeof(float) * CHAR_BIT; i++)
    {
        putchar(num.u & msb ? '1' : '0');
        msb >>= 1;
    }
    return 0;
}

AlbertoBSD

Caballeros tenian mi curiosidad ahora tienen mi atencion.

El detalle de pasar un numero Float a su cadena binaria es que realmente no sabes que estas interpretanro sin contexto, bien podria ser un numero entero o un numro negativo a complemente uno o complemento a dos.

Aqui hay un link con sobrr el estandar para operaciones aritmeticas de coma flotante.

https://es.m.wikipedia.org/wiki/IEEE_coma_flotante

Saludos.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

MAFUS

No es el IEEE754 lo que busca sino la verdadera representación de los números decimales en binario:

... + n2*22 + n1*21 + n0*20 + n-1*2-1 + n-2*2-2 + ...

Kaxperday

#5
Supongo que querrás hacer como std::bitset solo que esa es una clase de C++.

Bueno yo crearía un BYTE que actuara como máscara y lo iría iterando en un bucle dandole los siguientes valores 00000001 00000010 00000100 ... hasta 10000000. Para calcular este BYTE iterador solo tienes que igualarlo a 0 cada iteracción del bucle y sumarle 2^i y lo tendrás, luego con el operador AND (&) lo compararía con cada BYTE del numero (habrá que comparar cada BYTE del número (para un int 4 bytes, para un float 4 bytes también..), y por cada resultado positivo imprimes un 1 en una cadena y sino un 0.

Comparas en orden e imprimes, algo como lo que hace geeke.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

geeke, Kaxperday, AlbertoBSD, pide la representación binaria de un número, dada su representación decimal. Nada de bits ni ni estándares.

alexisrojas, dices que lo has tratado de hacer en C. ¿Puedes poner el código y los errores que este te genera? O al menos decir concretamente qué problemas te da.

geeke

#7
Vaya no me había fijado en la formula que se propuso pero bueno tal vez esto sirva

Código (cpp) [Seleccionar]
#include <iostream>
#include <bitset>

int main()
{
    std::string buf;
    float n = 0.75;
    unsigned zero = n;

    !zero ? buf = "0." : buf = std::bitset<32>(n).to_string() + '.';
    n = n - (int)n;
    while(n > 0)
    {
        n = n * 2.0;
        buf = buf + ((int)n >= 1 ? '1' : '0');
        if((int)n >= 1) n = n - 1.0;
    }
    std::cout << (!zero ? buf : buf.substr(buf.find("1", 0))) << std::endl;
    return 0;
}