Компилаторщини
36 отговора
0 прегледа
Re: Компилаторщини
double a = sqrt(double(-1));
printf( "%d\n", a > 0);
printf( "%d\n", a < 0);
printf( "%d\n", a == 0);
printf( "%d\n", a > 0);
printf( "%d\n", a < 0);
printf( "%d\n", a == 0);
Re: Компилаторщини
браво пич, владееш материята... признавам те
ша те зема да работиш при мен на двойна надница
в момента на кой работодател служиш ?
ша те зема да работиш при мен на двойна надница
в момента на кой работодател служиш ?
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 на
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
> return a > b ? 1 : a < b ? -1 : 0;
Изключително четим код, отивам да повърна в банята...
Между другото навремето твоята "оптимизация" се изпълняваше в пъти по-бавно от ифовете. Не знам дали все още е така.
If I could remember the names of all those particles I would have been botanist -- Fermi
Re: Компилаторщини
Виж сега вместо да анализираш какво правела "функцията" дето даже я няма в показания код просто се опитах да ти обясня че това което си написал не е същото с оригинала и следователно е жалък опита да покажеш колко много разбираш от програмиране.
Но идеята е да върнеш три вариянта да документираш какво ще значи водещия бит на върнатото и гутоу
Сериозно ли това е идеята? Смятам че дори и да не е това идеята ти все пак можеш да убедиш авторът че е имал точно това в предвид.
Но идеята е да върнеш три вариянта да документираш какво ще значи водещия бит на върнатото и гутоу
Сериозно ли това е идеята? Смятам че дори и да не е това идеята ти все пак можеш да убедиш авторът че е имал точно това в предвид.
Re: Компилаторщини
Благодаря ти за информацията, но аз никога не съм твърдял подобно нещо, както и твоят коментар няма общо с това което аз съм казал.
Re: Компилаторщини
Никой, не се сетих за този случай. Значи правилно би било да се каже, че компилаторът може да не генерира warning когато сравняваните типове са от целочислен тип, а не просто фундаменталните типове.
Re: Компилаторщини
Може. Имай предвид, обаче че много пари взимам и много малко работя. Винаги закъснявам. Когато закъснявам си тръгвам по рано. Винаги обядвам дълго. Когато обядвам пия алкохол. Софтуерните процеси, код конвенции и всякакви правила и процедури си ги разпечатвам на принтер, мачквам ги дълго докато станат мекички и си бърша гъза с тях. Използвам обектно ориентираното програмиране, xml и думата entreprise само за да обиждам хората.
Ако си навит обади се.
Ако си навит обади се.
Re: Компилаторщини
Хитро.. мерси.
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
Re: Компилаторщини
И на теб мерси..
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
Re: Компилаторщини
А ако напишеш:
c = b;
d = b;
if(a>b) return 1;
if(a<c) return -1;
if(a==d) return 0;
Тогава пак ли искаш компилаторът да се "сети" да не негерира warning?
За компилатора (а > б), (а < б), (а == б) са си три отделни израза без връзка помежду им. Затова пак ти казвам недей да бъркаш компилатора и да му приписваш функционалности характерни за други програми.
c = b;
d = b;
if(a>b) return 1;
if(a<c) return -1;
if(a==d) return 0;
Тогава пак ли искаш компилаторът да се "сети" да не негерира warning?
За компилатора (а > б), (а < б), (а == б) са си три отделни израза без връзка помежду им. Затова пак ти казвам недей да бъркаш компилатора и да му приписваш функционалности характерни за други програми.
Re: Компилаторщини
Аха разбрах, оки нема праа жалки опити. Нема проблеми хабер си найн от програмиране, ще гледам да ти чета постовете, та барем се науча.
Re: А какво ще каже компилатора ако
"Изключително четим код, отивам да повърна в банята... "
Що да се стискаш - драйфай на место:) Не е само четимост, по принцип такъв стил е на кодиране е отвратителен.
Що да се стискаш - драйфай на место:) Не е само четимост, по принцип такъв стил е на кодиране е отвратителен.
Re: Компилаторщини
if(a>b) return 1;
if(a<b) return -1;
if abs(a-b) < 0.000001 return -1;
if(a<b) return -1;
if abs(a-b) < 0.000001 return -1;
И тва как помага?
Ако числата не са NaN и са различни ще се мине по един от първите два клона. В краен случай (мисля че сравнението на положителна и отрицателна 0 връщаше че са еднакви, макар че очевидно са различни) ще мине през равенството.
Всякакви операции с NaN връщат false и нема да влезнеш в ни един if.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Всякакви операции с NaN връщат false и нема да влезнеш в ни един if.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
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
Абе зависи от компилатора.
Една и съща програмка:
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