Вычисляю sin табличным методом
(LPC2478 в среде Keil 4.23)
кусок кода
Код
....
#define Tabl_acos 0x80000000
...
...
double tsin (double arg)
{
double argout;
unsigned int *adr;
adr = (unsigned int *)((unsigned int)Tabl_sin + (unsigned int)(fabs(arg)*400));
argout = *(double *)adr;
return (argout);
}
Указатель adr при вычислении имеет совершенно фантастическое значение !
А в коде ниже (unsigned int)fabs(arg)*400 работает правильно, но теряется точность, поскольку приведение к uint происходит до умножения на 400.
Код
....
#define Tabl_acos 0x80000000
...
...
double tsin (double arg)
{
double argout;
unsigned int *adr;
adr = (unsigned int *)((unsigned int)Tabl_sin + (unsigned int)fabs(arg)*400);
argout = *(double *)adr;
return (argout);
}
Пробовал разные ключи компилятора - не помогает
Заметил, что ошибка возникает, когда значение arg*400 превышает 255.
Глюк компилятора?