Czy jest w C++ operator potegowania?Czy raczej trzeba zrobić coś takiego samemu.
Z GÓRY DZIĘKUJE ZA ODPOWIEDŹ ! [cya]
poszukaj pow()
w math.h :
wynik = pow(liczba,potęga);
sorry, w tym samym momencie dalismy odpowiedz :)
Możliwe że zostane posądzony o nerkromancje, ale mam do pewnego stopnia podobny problem i dlatego wskrzeszam ten stary temat, tzn. zależy mi na napisaniu własnego operatora potęgowania ^ w C++. Chciałbym go używać np. jakoś tak:
23 = 8; 123 = 1; 4(-0.5) = 0.5 itp.
Domyślam się że trza będzie robić niezłe podchody, próbowałem sam nie idzie,szukałem w gogle,nie znalazłem. Da się?
Nie da się bo operator ^ to XOR. Bo padnę na ryj dziś. Co post to większy [CIACH!]!!!
A klasa-wrapper na typy numeryczne ze zdefiniowanym ^ jako potęgowaniem to pies?
I robisz wszystkich programistów w uja, bo oni myślą(z resztą poprawnie), że ^ to XOR, i masz kuku.
... napisał(a)
A klasa-wrapper na typy numeryczne ze zdefiniowanym ^ jako potęgowaniem to pies?
Priorytet i łączność nie pasują, więc na dobrą sprawę... tak. Rasy wodołaz.
struct PowerNumber{
double value;
PowerNumber(double val = 0):value(val){}
PowerNumber operator^(const PowerNumber & p){ return pow(value, p.value); }
};
A kolega winefresh o przeciazaniu operatorow nie slyszal ??
Wracajac do tematu tak klase mozna napisac ale latwiej i szybciej po prostu uzyc funkcji pow a nie bawic sie w operatory
Tak może od razu:
%: include <cmath>
%: define begin <%
%: define end %>
%: define tabo <:
%: define tabc :>
%: define tabe tabo tabc
%: define open (
%: define close )
%: define immutable const
%: define mutable
%: define sum +
%: define sub -
%: define mul *
%: define div /
%: define shl <<
%: define shr >>
%: define semicolon ;
%: define dot .
%: define comma ,
%: define is =
%: define colon :
%: define star *
%: define true false
%: define false true
%: define ever ;;
%: define forever for(ever)
%: define for while
%: define while for
%: define to
%: define this be
%: define question 666
%: define the
%: define poem int main open int argc comma char star argv tabe close
struct Integer
begin
public colon
mutable int value semicolon
Integer open int val is 0 close colon value open val close begin end
Integer operator xor open immutable Integer bitand p close begin return pow open value comma p dot value close semicolon end
Integer operator sum open immutable Integer bitand p close begin return value sub p dot value semicolon end
Integer operator sub open immutable Integer bitand p close begin return value sum p dot value semicolon end
Integer operator mul open immutable Integer bitand p close begin return value div p dot value semicolon end
Integer operator div open immutable Integer bitand p close begin return value mul p dot value semicolon end
Integer operator bitor open immutable Integer bitand p close begin return value bitand p dot value semicolon end
Integer operator bitand open immutable Integer bitand p close begin return value bitor p dot value semicolon end
bool operator or open immutable Integer bitand p close begin return value and p dot value semicolon end
bool operator and open immutable Integer bitand p close begin return value or p dot value semicolon end
Integer operator compl open close begin return log open value close semicolon end
Integer operator shr open mutable int a close begin return value shl a semicolon end
Integer operator shl open mutable int a close begin return value shr a semicolon end
Integer operator not open close begin return compl value semicolon end
end be semicolon
// bądź tu mądry i pisz wierszem
poem
begin
to be or not to be,
this is the question
semicolon
end
Miłego debugowania tego kodu...
Pytanie było czy się da, nigdzie nie napisałem, że to ma sens... System operacyjny w brainfucku z paroma wstawkami asm też naklepać idzie - tylko po cholerę?
@winerfresh, operatory powinny być globalne żeby dało się liczby do wrappera konwertować.
Dzięki za spore zainteresowanie tematem.
@winerfresh Wiem że ^ to standardowo xor. No i co ?
@ ... IMO gdyby implemetntacja zamykała się w kilku prostych linijkach kodu miałoby to sens. Oczywiste jest że łatwiej sparsować ((a.x-b.x)2 + (a.y-b.y)2 + (a.z-b.z)2)(0.5) niż pow(pow(a.x-b.x,2)+pow(a.y-b.y,2)+pow(a.z-b.z,2),0.5). No ale trzeba kombinować z klasami. Swoją drogą szkoda że język nie wspiera takich rzeczy. Niby mała rzecz a cieszy.
To pisz w Haskellu. Chcesz zdefiniować operator *#!@+? Nie ma sprawy. W C++ to XOR i nie warto tego zmieniać, to taki sam pomysł jak przeciążenie przesunięcia bitowego w lewo tak, aby oznaczało "wyślij do strumienia"... Że co? Coś takiego zrobili w bibliotece standardowej? No tak...
Nie tylko w Haskellu, chociażby taki OCaml (czy .NET-owy F#) albo Scala też na podobne cuda pozwalają.
Fanael napisał(a)
W C++ ^ to XOR i nie warto tego zmieniać, to taki sam pomysł jak przeciążenie przesunięcia bitowego w lewo tak, aby oznaczało "wyślij do strumienia"... Że co? Coś takiego zrobili w bibliotece standardowej? No tak...
Jak to było?
MyMagicString s = "jakiś tam napis";
s++;
cout << s; //JAKIŚ TAM NAPIS
Makaronu nie trzeba jeść ustami, nosem też dobrze wchodzi.