[Solucionado] Establecer la cantidad de dígitos a la derecha de la coma [C]

Iniciado por NOB2014, 9 Enero 2016, 15:34 PM

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

kondrag_X1

Siento mucho decirte que si te quieres complicar vas a tener que trabajar a nivel de bit con el estándar IE754, no es complicado separas parte entera mantisa y exponente y sacas los datos.

NOB2014

Hola, Yoel Alejandro. -
Estebe haciendo muchas pruebas y el resultado es siempre correcto, solo falla cuando introduzco más de 9 dígitos a la derecha de la coma, pero eso no es inpedimento y en todo caso se puede limitar. -
kondrag_X1 voy a informarme sobre lo que propones porque me quede muy intrigado, no sé por dónde empezar. -

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Yoel Alejandro

NOB2014, puedes aumentar la precisión cambiando en donde dice FLT_EPSILON por la constante DBL_EPSILON

En este caso cambias del épsilon de la máquina para punto flotante al épsilon para precisión doble. Creo que al manejar más de nueve decimales estás considerando una precisión doble, por eso requieres DBL_EPSILON

Saludos, Yoel
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

NOB2014

Hola, Yoel.
Maravilloso, posibilita un máximo de 14 dígitos, más que suficiente. -

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

furciorifa

#24
Por fin he solucionado lo que querías amigo y sí hay una forma estándar y sencilla de hacerlo te paso mi código y espero que te guste sigue las instrucciones, te pido por favor que me envies un mensaje si te funciono es para cuestiones estadísticas que llevo #include <stdlib.h>
#include <stdio.h>

int main()
{
  div_t d;
  int num, denom;
  double aux;
  printf( "Escriba el numerador y el denominador (separados por un espacio):\n" );
  scanf( "%d %d", &num, &denom );
  d = div( num, denom );
   aux=d.rem/(double)denom;
  printf( "ldiv( %d, %d ) : cociente = %d, resto = %f\n", num, denom, d.quot, aux );

  return 0;
}


Espero que me contestes




Esta solución permite 30 decimales !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) :silbar: :silbar: :silbar:


                                                               

#include <stdlib.h>
#include <stdio.h>

int main()
{
   div_t d;
   int num, denom;
   double aux;
   printf( "Escriba el numerador y el denominador (separados por un espacio):\n" );
   scanf( "%d %d", &num, &denom );
   d = div( num, denom );
    aux=d.rem/(double)denom;
   printf( "ldiv( %d, %d ) : cociente = %d, resto = %.30lf\n", num, denom, d.quot, aux );

   return 0;
}







ivancea96


furciorifa

Cita de: ivancea96 en 30 Enero 2016, 23:54 PM
De esos decimales, solo 15 son reales.
Así es jeje no me fije, pero ya con una variable más grande tiene más precisión, un long double, me parece, de cualquier forma creo que mi solución es la que parece más eficaz no sé qué le parezca al dueño del post.