Cómo obtener el valor absoluto de double – c-language

2 minutos de lectura

avatar de usuario
usuario3155478

Quiero el valor absoluto de un doble negativo – y pensé que el abs-La función era tan fácil de usar como en Java, ¡pero NO!

parece que el abs-función devuelve un int porque tengo el valor 3.8951 y la salida es 3.000000

double d1 = abs(-3.8951);
printf("d1: ...%lf", d1);

¿Como puedo solucionar este problema? Es decir, quiero el valor absoluto de un double.

  • Has probado fabs(-3.8951)? man abs dice “calcular el valor absoluto de un entero” y fabs(3) está referenciado en “VER TAMBIÉN”. Nunca asuma que las cosas funcionan de la misma manera en diferentes idiomas. Especialmente porque Java tiene clases y puede sobrecargar métodos, pero C no.

    – acechador

    6 de enero de 2014 a las 18:07


  • @mbratch – gracias !!!!!!!!!!!!!!!! Lo consideraré en el futuro.

    – usuario3155478

    06/01/2014 a las 18:10

  • abs solo se implementa para enteros en C. Es por eso que todas las respuestas recomiendan que use fabs, que es el equivalente de coma flotante.

    – outis nihil

    6 de enero de 2014 a las 18:11

  • “valor absoluto de un doble negativo” es fácil: -x. 😉

    – chux – Reincorporar a Monica

    9 de febrero de 2021 a las 17:33

avatar de usuario
héroehuyongtao

Usar fabs() (en matemáticas.h) para obtener el valor absoluto de double:

double d1 = fabs(-3.8951);

  • Como eras un poco más rápido que los trucos, ganaste.

    – usuario3155478

    6 de enero de 2014 a las 18:26


  • fabs() es para dobles. fabsf() es para flotadores.

    – jigglypuff

    7 de septiembre de 2016 a las 4:36

  • Ambos merecen mi amor por igual.

    – Sipty

    22 de noviembre de 2017 a las 12:16

avatar de usuario
trucos

Usar fabs en vez de abs para encontrar el valor absoluto de double (o float) tipos de datos. Incluir la <math.h> encabezado para fabs función.

double d1 = fabs(-3.8951);

Vale la pena señalar que Java puede sobrecargar un método como abs para que funcione con un entero o un doble. En C, la sobrecarga no existe, por lo que necesita diferentes funciones para entero versus doble.

  • “En C, la sobrecarga no existe” –> En desacuerdo en parte, investigación <tgmath.h> usar fabs() con varios tipos de FP. Posible efecto similar.

    – chux – Reincorporar a Monica

    9 de febrero de 2021 a las 17:19

avatar de usuario
Firas Nomaan

He encontrado que usando cabs(double), cabsf(float), cabsl(long double), __cabsf(float), __cabs(double), __cabsf(long double) es la solucion

  //use fabs()
  double sum_primary_diagonal=0;
  double sum_secondary_diagonal=0;
  double difference = fabs(sum_primary_diagonal - sum_secondary_diagonal);

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad