Наибольшее представимое отрицательное число с плавающей точкой - PullRequest
2 голосов
/ 03 сентября 2010

Что такое независимый от платформы способ задания наибольшего представимого отрицательного числа с плавающей точкой?

Мы нашли алгоритм, который сломался при запуске на SPU для PS3, но работал нормально при компиляции для PPU:

float x = -FLT_MAX;
/* stuff */
if (x > 0.0f) {
    // If x is unchanged, code is executed on SPU
}

По сути, есть ли четко определенный отрицательный эквивалент FLT_MAX?

Ответы [ 2 ]

4 голосов
/ 04 сентября 2010

Не зная, что в / * материале * /, я не думаю, что ваша проблема может быть полностью решена здесь.

Здесь представлен хороший набор слайдов по проблемам, связанным с вычислением с плавающей точкой: http://realtimecollisiondetection.net/pubs/GDC07_Ericson_Physics_Tutorial_Numerical_Robustness.ppt - там может быть некоторая подсказка для вас относительно источника вашей проблемы.

IEEE 754 с плавающей запятой одинарной точности не совпадает с SPU, как с PPU - в главе 9 документа ISA SPU содержится полное объяснение, доступное с http://cell.scei.co.jp/e_download.html, которое также включает максимальную величину число с плавающей запятой одинарной точности.

4 голосов
/ 03 сентября 2010

Вы хотите std::numeric_limits::lowest(), но это только c ++ 0x, поэтому на данный момент не очень кроссплатформенный.

Вы определенно не хотите std::numeric_limits::min() - это наименьшая величина, а не самая дальняяотрицательный.

Если вы хотите что-то, что всегда будет меньше, чем все другие двойники, используйте -numeric_limits<double>::infinity().

...