resueltos punto programacion numeros numero numericos normalizado normalizada metodos mantisa informatica flotante ejercicios ejemplos coma c floating-point double c89

programacion - punto flotante informatica



C: convierte el doble en flotante, conservando la precisiĆ³n del punto decimal (3)

Los números de punto flotante se representan en notación científica como un número de solo siete dígitos significativos multiplicados por un número mayor que representa el lugar del lugar decimal. Más información al respecto en Wikipedia:

http://en.wikipedia.org/wiki/Floating_point

Quería convertir el doble para flotar en C, pero quería preservar el punto decimal exactamente como fuera posible sin ningún cambio ...

por ejemplo, digamos que tengo

double d = 0.1108; double dd = 639728.170000; double ddd = 345.2345678

ahora corríjame si estoy equivocado, sé que la precisión de punto flotante es aproximadamente 5 números después del punto. ¿Puedo obtener esos cinco números después del punto exactamente como lo tenía el doble? para que lo anterior resulte como sigue:

float f = x(d); float ff = x(dd); float fff = x(ddd); printf("%f/n%f/n%f/n", f, ff, fff);

debería imprimir

0.1108 639728.17000 345.23456

todos los dígitos después del límite de precisión (que asumo como 5) se truncarían.


Un float generalmente tiene aproximadamente 7 dígitos de precisión, independientemente de la posición del punto decimal. Entonces, si quieres 5 dígitos de precisión después del decimal, deberás limitar el rango de los números a menos de alrededor de +/- 100.


float y double no almacenan decimales. Almacenan lugares binarios : float es (asumiendo IEEE 754) 24 bits significativos (7.22 dígitos decimales) y el doble es 53 bits significativos (15.95 dígitos significativos).

Convertir de double a float le dará el float más cercano posible, por lo que el redondeo no lo ayudará. Ir a la otra dirección puede darle dígitos de "ruido" en la representación decimal.

#include <stdio.h> int main(void) { double orig = 12345.67; float f = (float) orig; printf("%.17g/n", f); // prints 12345.669921875 return 0; }

Para obtener una double aproximación al valor decimal agradable que pretendía, puede escribir algo como:

double round_to_decimal(float f) { char buf[42]; sprintf(buf, "%.7g", f); // round to 7 decimal digits return atof(buf); }