¡Obtén tus primeros 500 $GoodDollars!. - Lanzan GoodDollar, una iniciativa que permite obtener una RENTA BÁSICA a través de una moneda digital.
Tras registrarse, recibira la criptomoneda, G$, podrá almacenarla en la billetera de GoodDollar y realizar transacciones. Cada día se regala un grupo de G$ a los usuario, que pueden utilizar el activo digital para facilitar el trueque y el comercio a nivel local y mundial. Solo es necesario una cámara para crear una cuenta ya que se solicitarán datos biométricos para asegurar una cuenta por persona.


ayuda con algo de flotante decimal a binario?

bueno amigo linux corri el programa pero se me cierra al meter el numero, q puedo hacer q tendra?
ayuda con algo de flotante decimal a binario?

Respuestas:

Esta chida tu pregunta, es mas, para pasar de binari a cualquier entero y viseversa es muy facil, solo modificaremos un poco tu algoritmo, solo incestaremos un for y unas cuantas variables:

int num; //Este sera el numero original
int bin[20], i=0;

cout<<"Ingrese un numero a decimal: ";
cin>>num;

while(num > 1){
bin[i] = num%2;
num /= 2;
i++;
}
bin[i] = num;

Ahora si, la coma flotante. En un numero real entero ya sabes que lo unico que hay que hacer es dividir entre 2 dos y el residuo es una parte del numero binario, pero con la parte decimal es otra cosa. Ve el siguiente ejemplo:

25,37510 = 25 + 0,375 = 11001 + decimales

Hasta aqui lo unico que se ha hecho ha sido convertir a binario la parte entera del numero decimal, ahora para saber la parte decimal lo que haremos sera ir multiplicando por 2 la parte decimal y la parte entera que se obtenga corresponde a una parte del numero decimal.

0,375·2 = 0,750 (primer decimal el 0); 0,75·2 = 1,50 (segundo decimal el 1); 0,50·2 = 1,0 (tercer decimal el 1).

Queda finalmente: 25,37510 = 11001,011

por consiguiente podemos modificar nuestro nuevo algoritmo:

double num, dec; //Este sera el numero original y la parte deimal
int bin[20], bin_d[20], i=0, temp;

cout<<"Ingrese un numero a decimal: ";
cin>>num;

temp = floor(num); //Para obtener la el numero pero sin decimales. Consulta math.h
dec = num - temp;

while(temp > 1){
bin[i] = temp%2;
temp/=2;
i++;
}
bin[i] = temp; i=0;

//Comienza con la parte decimal;
while(dec != 1.0){
dec = dec * 2;
bin_d[i]=abs(dec);
if(dec>1) dec -= 1;
i++;
}

Alguna pregunta o comentario hasmelo saber. Saludos


Recuerda que la representación interna de los números de punto flotante es muy distinta a la de los enteros; es una especie de notación científica binaria. Este programa te pasa un número float (en realidad lo imprime, pero puedes asignar los digitos a un vector de caracteres, por ejemplo) a unos y ceros:

/*
** flast.c
** Muestra los bits de un numero float
*/
#include <stdio.h>
union nmr {
float f;
long i;
};
main() {
long n_bits = 8 * sizeof (float), k, masc = 1 << n_bits - 1;
union nmr num;
puts("Ingresa un numero de punto flotante:");
scanf("%f", &num.f);
for (k ^= k; k < n_bits; ++k, num.i <<= 1)
putchar(num.i & masc ? '1' : '0');
putchar(' ');
return 0;
}

P.D. En mi GNU/Linux, long tiene la misma extensión que float (32 bits), no sé si en tu sistema sea igual, chécalo.

El algoritmo de Logico es útil; pero creo que hay una imprecisión en tu pregunta (en realidad no la hay pero para la mayoría es implícita por no saberse lo que es punto flotante).
Ése algoritmo no muestra números de punto flotante, por que los números de punto flotante ni siquiera tienen un punto, son totalmente binarios. El algoritmo de Logico hace representaciones de números reales con dígitos binarios, se resume con la mención de la composición potencial del sistema numérico:

10111.1101 = 1*(2^4)+0*(2^3)+1*(2^2)+1*(2^1)+1*(2^0)
+1*(2^-1)+1*(2^-2)+0*(2^-3)+1*(2^-4)

Si tu tarea es la representación binaria de números reales, entonces éso es lo que necesitas;
Por el contrario, si es la representación de números de PUNTO FLOTANTE, es mi algoritmo. El formato de un número de punto flotante de 32 bits (precisión sencilla) es el siguiente:

11111111 11111111 11111111 11111111
| |------------- | |----------- --------------- --------------|

1 bit de signo (bit 0 (el MSB, el de hasta la izquierda))
8 bits de exponente (bits 1 a 8)
23 bits de mantisa o fracción (bits 9 a 31)


Puedes consultar literatura sobre el tema (es complejo) como Number Systems and Arithmetic, de Garner.


Lanzan GoodDollar, una iniciativa que permite obtener una RENTA BÁSICA a través de una moneda digital. - ¡Obtén tus primeros 500 $GoodDollars!. -
Según los creadores de GoodDollar, el objetivo del proyecto es "proporcionar un nivel de vida básico y reducir la desigualdad de la riqueza mediante la creación de una renta básica universal". Para unirse al proyecto solo son necesarios el acceso a Internet y un teléfono móvil.