Почему этот код иногда возвращает NaN?

Это часто возвращает NAN («Не число») в зависимости от ввода:

#define PI 3.1415f

GLfloat sineEaseIn(GLfloat ratio) {
 return 1.0f-cosf(ratio * (PI / 2.0f));
}

Я попытался уменьшить PI на несколько цифр, чтобы посмотреть, поможет ли это. Нет игральных костей. Затем я подумал, что это может быть несоответствие типа данных, но float и glfloat кажутся эквивалентными:

гл.ч

typedef float           GLfloat;

math.h

extern float  cosf( float );

Это вопрос кастинга?


person user360092    schedule 11.06.2010    source источник
comment
Кажется, с твоим кастингом все в порядке. Может ли быть, что соотношение может быть NAN или INF для начала?   -  person Claus Broch    schedule 11.06.2010
comment
Какие примеры входных данных вызывают NaN, когда вы этого не ожидаете?   -  person John Feminella    schedule 11.06.2010
comment
Как примечание, вам не нужно определять PI (или pi/2) самостоятельно. Вы можете использовать M_PI_2, определенный в <math.h> (предпочтительно либо с приведением к float, либо с добавленным суффиксом f, чтобы избежать ненужных преобразований во время выполнения).   -  person Stephen Canon    schedule 28.07.2010


Ответы (1)


Я подозреваю, что происходит одно из следующего:

  • ваше входное значение для ratio может быть не таким, как вы ожидаете, а ratio само по себе, возможно, NaN
  • cosf, которому вы звоните, не тот, что в math.h

В противном случае, кажется, что с вашим выражением лица что-то не так.

person John Feminella    schedule 11.06.2010
comment
Спасибо за вашу помощь! Я ошибался один за другим с моим перечислением, которое выбирало функцию плавности, поэтому я в основном отлаживал неправильную функцию плавности. Это плохой вариант, и теперь я знаю, почему: GLfloat circleEaseInOut(GLfloat ratio) { return ((ratio = 2) ‹ 1) ? -0,5*(sqrtf(1-отношение)-1): 0,5*(sqrtf(1-(отношение-=2)*отношение)+1); } Я изменил эти числа на числа с плавающей запятой, и теперь все работает! Спасибо за вашу помощь! Я бы, вероятно, все еще гонялся за этой идеей приведения типов в кроличью нору. - person user360092; 11.06.2010