Szukam "luk" w C++

0

Cześć potrzebuje jakiegoś sprytnego kawałku kodu który na pozór wygląda w porządku ale tak naprawdę wynik jego działania jest inny niż można by było się tego spodziewać, mam za zadanie na jednym przedmiocie na studiach napisać program w C/C++ który udowadnia równość dwóch różnych liczb, musi to być zrobione bardzo sprytnie tak by wyglądało to na pierwszy rzut oka normalnie. Zastanawiam się czego mógłbym użyć, jakiegoś niejawnego rzutowania liczb podczas ich dodawania/odejmowania/mnożenia/dzielenia lub czegoś w tym rodzaju ? Proszę o pomoc i jakieś wskazówki : )

1

Albo np.

double x = 0.1;
float y  = 0.1;
if(x!=y){
  cout<<"nie rowne";
}

http://ideone.com/Dqzu8d
czyli double z nieskończonymi ułamkami (jak 0.1) gdzie double będzie miał wszystkie bity z tym okresem a float tylko pierwsze 32 bity a pozostałe 32 (które zostaną dodane przy promocji do wyższego typu przy porównaniu) dostaną 0.

1

wybierz sobie coś bez UB ; >
Jak by ci jeszcze było mało to daj znać, zarzucę innym wtfkiem z C++ ; p

P.s jeszcze chamska reklama... na irc 4p często wrzucamy/wrzucam zagadki z różnymi wtfkami C++, więc jak ktoś jest zainteresowany to zapraszamy ; p

1

https://github.com/regehr/ub-canaries (To akurat C) i takie podobne (słowa klucze, jak już wyżej pisali UB, UB exploiting)

0

C nawet lepsze jest :)

0

Według mnie UB nie mieszczą się w zakresie zadania. UB są w standardzie zgodnie z myślą "it's not a bug, it's a feature", więc nie można ich klasyfikować jako "luki" - po prostu niepoprawny kod daje bzdurne wyniki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1