Konwertuj na wartość bezwzględną w celu C

187

Jak przekonwertować liczbę ujemną na wartość bezwzględną w celu C?

to znaczy

-10

staje się

10?

redconservatory
źródło
3
@SalvadorDali: Nie ma nic złego w SO; pytanie nie wymagało wysiłku i nie było zgodne z wytycznymi SO, a odpowiedź jest szczegółowa i poprawna.
Josue Espinosa,

Odpowiedzi:

458

W zależności od typu zmiennej, jednego abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), lub fabsl(long double).

Te funkcje są częścią standardowej biblioteki C, a zatem są obecne zarówno w Objective-C, jak i zwykłym C (i są ogólnie dostępne również w programach C ++).

(Niestety, nie ma żadnej habs(short)funkcji. Albo scabs(signed char)w tym przypadku ...)


Nagłówki Objective-C firmy Apple i GNU zawierają również ABS()makro, które jest niezależne od typu. Nie polecam ABS()jednak używania, ponieważ nie gwarantuje się, że będzie bezpieczny pod względem skutków ubocznych. Na przykład ABS(a++)będzie miał niezdefiniowany wynik.


Jeśli używasz C ++ lub Objective-C ++, możesz wprowadzić <cmath>nagłówek i użyć std::abs(), który jest szablonowany dla wszystkich standardowych typów liczb całkowitych i zmiennoprzecinkowych.

Jonathan Grynspan
źródło
33
Możesz też użyć makra ABS, które działa na dowolnym typie liczby.
ughoavgfhw
1
@ugsomethingsomething ABS()nie jest jednak bezpieczny dla wszystkich kompilatorów pod względem skutków ubocznych i dlatego nie polecam go używać.
Jonathan Grynspan
To jest właściwie: fabsf (double) fabs (float)
Alex
@Alex nie, są to definicje w matematyce. H:extern float fabsf(float); extern double fabs(double);
Gobe,
3

Możesz użyć tej funkcji, aby uzyskać wartość bezwzględną:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
da Rocha Pires
źródło