LINUX.ORG.RU

[c] xcalc math.c

 


0

1
#ifdef _CRAY		/* kludge around Cray STDC compiler */
double (*log_p)() = log;
#define log ((*log_p))
double (*exp_p)() = exp;
#define exp ((*exp_p))
double (*sqrt_p)() = sqrt;
#define sqrt ((*sqrt_p))
double (*log10_p)() = log10;
#define log10 ((*log10_p))
double (*atan2_p)() = atan2;
#define atan2 ((*atan2_p))
double (*asin_p)() = asin;
#define asin ((*asin_p))
double (*acos_p)() = acos;
#define acos ((*acos_p))
double (*atan_p)() = atan;
#define atan ((*atan_p))
double (*sin_p)() = sin;
#define sin ((*sin_p))
double (*cos_p)() = cos;
#define cos ((*cos_p))
double (*tan_p)() = tan;
#define tan ((*tan_p))
double (*pow_p)() = pow;
#define pow ((*pow_p))
#endif /* _CRAY */

Какой в этом смысл?

★★

Можеть хотели наипать компилятор. Ну предположим, компилятор шибко умный, и когда он видит, что кто-то вызывает функции, типа log,exp и т. д., то подставлял вместо вызова ассемблерные инструкции. А кто-то захотел, чтоб был именно вызов функций.

pathfinder ★★★★
()

Может хотели зачем-то иметь возможность изменять на ходу функции для расчетов синусов, косинусов и т. д.?

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

Этот вариант кажется мне наиболее логичным.

bk_ ★★
() автор топика

Судя по комментарию, это обход какой-то багофичи определённого компилятора.

Gvidon ★★★★
()
Ответ на: комментарий от zhuravlik

Походу, это

To use these functions, add the prefix that follows to system-offered function names to be vectorized by #define in <math.h>. When the function call of a standard function appears in a loop that can be vectorized and the standard function has the corresponding vector function, the compiler calls the vector function instead of the standard function. If such a function call appears outside of loops which can be vectorized, the compiler generates a code which calls the corresponding high-speed scalar function. 
bk_ ★★
() автор топика
Ответ на: комментарий от bk_

Видимо, да. Авторам хака, конечно, респект за изобретательность. =)

zhuravlik ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.