Компилаторщини

36 отговора 0 прегледа
в отговор на headhunter #21

Re: Компилаторщини

double a = sqrt(double(-1));

printf( "%d\n", a > 0);
printf( "%d\n", a < 0);
printf( "%d\n", a == 0);

Отговор
в отговор на Пeтъp Пeтpoв #22

Re: Компилаторщини

браво пич, владееш материята... признавам те

ша те зема да работиш при мен на двойна надница
в момента на кой работодател служиш ?

Отговор
в отговор на headhunter #23

Re: Компилаторщини


#include <limits>

double d1 = std::numeric_limits<double>::quiet_NaN();
double d2 = std::numeric_limits<double>::signaling_NaN();


А ква е разликата - виж какво казва Мануел по въпроса.

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_

Редактирано от Colombino на

Отговор
в отговор на ГHУCEH®ГHOM #24

Re: А какво ще каже компилатора ако

> П.П. ето как би станало на един ред
> return a > b ? 1 : a < b ? -1 : 0;

Изключително четим код, отивам да повърна в банята...

Между другото навремето твоята "оптимизация" се изпълняваше в пъти по-бавно от ифовете. Не знам дали все още е така.

If I could remember the names of all those particles I would have been botanist -- Fermi
Отговор
в отговор на expeler #25

Re: Компилаторщини

Виж сега вместо да анализираш какво правела "функцията" дето даже я няма в показания код просто се опитах да ти обясня че това което си написал не е същото с оригинала и следователно е жалък опита да покажеш колко много разбираш от програмиране.

Но идеята е да върнеш три вариянта да документираш какво ще значи водещия бит на върнатото и гутоу

Сериозно ли това е идеята? Смятам че дори и да не е това идеята ти все пак можеш да убедиш авторът че е имал точно това в предвид.

Отговор
в отговор на Tweeg #26

Re: Компилаторщини

Благодаря ти за информацията, но аз никога не съм твърдял подобно нещо, както и твоят коментар няма общо с това което аз съм казал.

Отговор
в отговор на Пeтъp Пeтpoв #27

Re: Компилаторщини

Никой, не се сетих за този случай. Значи правилно би било да се каже, че компилаторът може да не генерира warning когато сравняваните типове са от целочислен тип, а не просто фундаменталните типове.

Отговор
в отговор на Гypy #28

Re: Компилаторщини

Може. Имай предвид, обаче че много пари взимам и много малко работя. Винаги закъснявам. Когато закъснявам си тръгвам по рано. Винаги обядвам дълго. Когато обядвам пия алкохол. Софтуерните процеси, код конвенции и всякакви правила и процедури си ги разпечатвам на принтер, мачквам ги дълго докато станат мекички и си бърша гъза с тях. Използвам обектно ориентираното програмиране, xml и думата entreprise само за да обиждам хората.

Ако си навит обади се.

Отговор
в отговор на Пeтъp Пeтpoв #29

Re: Компилаторщини

Хитро.. мерси.

General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
Отговор
в отговор на Colombino #30

Re: Компилаторщини

И на теб мерси..

General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
Отговор
в отговор на фъk #31

Re: Компилаторщини

А ако напишеш:

c = b;
d = b;

if(a>b) return 1;
if(a<c) return -1;
if(a==d) return 0;

Тогава пак ли искаш компилаторът да се "сети" да не негерира warning?

За компилатора (а > б), (а < б), (а == б) са си три отделни израза без връзка помежду им. Затова пак ти казвам недей да бъркаш компилатора и да му приписваш функционалности характерни за други програми.

Отговор
в отговор на фъk #32

Re: Компилаторщини

Аха разбрах, оки нема праа жалки опити. Нема проблеми хабер си найн от програмиране, ще гледам да ти чета постовете, та барем се науча.

Отговор
в отговор на | #33

Re: А какво ще каже компилатора ако

"Изключително четим код, отивам да повърна в банята... "

Що да се стискаш - драйфай на место:) Не е само четимост, по принцип такъв стил е на кодиране е отвратителен.

Отговор
в отговор на 3мeй #34

Re: Компилаторщини

if(a>b) return 1;
if(a<b) return -1;
if abs(a-b) < 0.000001 return -1;

Отговор
в отговор на Швepтнep #35

Re: Компилаторщини

if abs(a-b) < 0.000001 return 0;

Отговор
в отговор на Швepтнep #36

И тва как помага?

Ако числата не са NaN и са различни ще се мине по един от първите два клона. В краен случай (мисля че сравнението на положителна и отрицателна 0 връщаше че са еднакви, макар че очевидно са различни) ще мине през равенството.

Всякакви операции с NaN връщат false и нема да влезнеш в ни един if.

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор
в отговор на Colombino #37

Re: И тва как помага?

> Всякакви операции с NaN връщат false и нема да влезнеш в ни един if.

Абе зависи от компилатора.
Една и съща програмка:
double d;

d = std::numeric_limits<double>::quiet_NaN(); // -1.#IND000000000

printf( "%d\n", d > 0);
printf( "%d\n", d < 0);
printf( "%d\n", d == 0);

d = std::numeric_limits<double>::signaling_NaN(); // -1.#INF000000000

printf( "%d\n", d > 0);
printf( "%d\n", d < 0);
printf( "%d\n", d == 0);

((unsigned char*)&d)[6] = (unsigned char)0xFF; // -1.#QNAN00000000

printf( "%d\n", d > 0);
printf( "%d\n", d < 0);
printf( "%d\n", d == 0);


ако я компилираш с Visual C++ 6 дава:
0
1
1
0
1
0
0
1
1

същото нещо с gcc version 3.4.5 (mingw special) дава каквото се очаква:
0
0
0
0
0
0
0
0
0

Отговор