Strona 1 z 2

[C++] modul liczb

: 4 paź 2011, o 19:08
autor: Inkognito
Chcem zapytac, czy jest jaka funkcja w c++ zeby liczylaby modul liczb
np.: jezeli a=-5 to wyda 5, jezeli a=5 to i wyda 5;
czy cos takiego bez ifu nie uda sie zrobic?

[C++] modul liczb

: 4 paź 2011, o 19:09
autor: chlorofil
abs(...), fabs(), itp.

[C++] modul liczb

: 4 paź 2011, o 19:16
autor: Inkognito
dzieki,
jak rozumiem roznicy miedzy nimi zadnej?

[C++] modul liczb

: 4 paź 2011, o 19:31
autor: chlorofil
Jest różnica. abs() przyjmuje inta, a fabs() double'a.

[C++] modul liczb

: 4 paź 2011, o 19:59
autor: Althorion
Zawsze można też:

Kod: Zaznacz cały

a > 0 ? a : -a

[C++] modul liczb

: 5 paź 2011, o 02:22
autor: Xitami
funkcja abs() w języku C/C++ (bez if)

Kod: Zaznacz cały

int abs(int O00)<%return(O00<<!000)*(O00>>037)+O00/*OOO++ - 012*/ +" else return "&000;%>
a może makro

Kod: Zaznacz cały

#define ABSI(x) (((x) & ~(((int)(x))>>31)) - ((x) & (((int)(x))>>31)))

[C++] modul liczb

: 5 paź 2011, o 18:50
autor: adambak
Xitami, czemu w swoich przykładowych kodach często używasz takich dziwnych nazw zmiennych? imo jest nieczytelne i można dostać oczopląsu.. ale proszę nie zrozum mnie źle, po prostu pytam z ciekawości, czy takie nazwy są używane przez Ciebie z jakiegoś konkretnego powodu

[C++] modul liczb

: 5 paź 2011, o 19:08
autor: Xitami
pewnie, że zamiast

Kod: Zaznacz cały

int abs(int O00)<%return(O00<<!000)*(O00>>037)+O00/*OOO++ - 012*/ +" else return "&000;%>
mogłem napisać

Kod: Zaznacz cały

int abs(int n){
        return 2*n*(n>>31)+n;}
co jest absolutnie równoważne
ale tak jest mniej zabawnie i widać, że funkcja ma wadę,
ślubuję, że tu pierwszy raz udziwniałem by ukryć wadę mojego pomysłu
makro wziąłem z książki

jeszcze jeden pomysł : sqrt(n*n)

[C++] modul liczb

: 5 paź 2011, o 20:34
autor: chlorofil
Pomysł kompletnie nietrafiony. Liczyć pierwiastek tylko po to, żeby wyznaczyć wartość bezwzględną? Widać żeś matematyk, a nie programista ;P

[C++] modul liczb

: 5 paź 2011, o 20:39
autor: adambak
Xitami tylko podał różne metody zrealizowania tego zadania (jak zwykle kilka).. myślę, że to nie stanowi podstawy do wydawania osądów czy jest matematykiem czy programistą z resztą ja go kojarzę jako właśnie dobrego programistę

[C++] modul liczb

: 5 paź 2011, o 21:04
autor: Xitami
Dziękuję Adasiu

Istnieją takie liczby których modułu nie da się policzyć bez pierwiastka.
A OP w końcu nie powiedział o jakie liczby chodzi.

[C++] modul liczb

: 5 paź 2011, o 22:02
autor: chlorofil
Xitami pisze:Istnieją takie liczby których modułu nie da się policzyć bez pierwiastka.
Np. ?

[C++] modul liczb

: 5 paź 2011, o 22:45
autor: Xitami
nie wiem jak bez pierwiastka zabrać się do zesoplonych

[C++] modul liczb

: 5 paź 2011, o 22:46
autor: Afish
Althorion pisze:Zawsze można też:

Kod: Zaznacz cały

a > 0 ? a : -a
Przy czym ten kod nie zawsze zadziała :) Oczywiście mam tu na myśli przypadek INT_MIN.

[C++] modul liczb

: 6 paź 2011, o 00:10
autor: chlorofil
Oczywiście. To jest słuszna uwaga. Dlatego polecam zastosowanie funkcji bibliotecznych.