🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
1 messages
1 total messages Started by Sc Wed, 15 Sep 1999 00:00
Puede que printf no redondee siempre igual (GCC, Linux) ?
#18397
Author: Sc
Date: Wed, 15 Sep 1999 00:00
53 lines
2258 bytes
Utilizando GCC en LINUX:


#include <stdio.h>

int main(int, char**);

int main(argc,argv)
int argc;
char *argv[];
{
  double d=0.0;

  d=0.25;
  printf("Valor sin redondeo %.2f pero redondea por abajo : %.1f\n",d,d);

  d=0.45;
  printf("Valor sin redondeo %.2f pero redondea por arriba: %.1f\n",d,d);
  exit(0);
}

La salida que produce es:


Valor sin redondeo 0.25 pero redondea por abajo : 0.2
Valor sin redondeo 0.45 pero redondea por arriba: 0.5


En el ejemplo, parece ser que debido a la manera interna en que se guarda el
tipo double, al establecer d=0.25, realmente se guarda como 0.2499999....,
con lo que al redondear a un decimal lo deja como 0.21. Sin embargo, cuando
guarda el valor 0.45 lo guarda como 0.45...........1...., con lo que al
redondear deja 0.5.

Ya se que se puede hacer una funcion propia que redondee, como yo quiera,
pero tengo algunas librerias de las cuales no tengo el codigo fuente (no
puedo modificarlas) y que en otros S.O. (SCO),  hacian el redondeo
para arriba. En Linux no las puedo utilizar porque esas librerias tienen
funciones que esperan que el sprintf redondee de esa forma. Por este motivo,
no necesito una nueva funcion que redondee como quiero sino que el redondeo
del sprintf se realize de una forma homogenea.


Hay algun define en algun archivo .h que pueda cambiar y que como
consecuencia
el redondeo se realize de la forma deseada ??? o algun parametro el GCC al
compilar mi programa que usa dichas librerias ????

Si la solucion pasa por guardar la informacion como fixed point, como puedo
hacerlo y que debo cambiar para que el double sea fixed-point en lugar de
floating point ???

Gracias Anticipadas,
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads