[personal profile] dememax
Оригинал взят у [livejournal.com profile] wizzard0 в Шутка для узких кругов
Что должна возвращать функция min(NaN, -Infinity), и почему?

UPD: уиии, я знаю уже 8 вариантов (не считая "implementation-defined" и "падаем с исключением")

1. NaN
"Если в вычислениях родился NaN, результат любых вычислений типа-неверен, заражаем результаты ошибкой дальше"

2. Оставшийся операнд
"Если NaN означает отсутствие результата, то min(пусто, что_то) = что_то"
(С99, IEEE754-2008)

3. Операнд №2
При свёртке (fold) трактуем NaN во втором аргументе как "неверно", а в первом как "пусто"
(x86 minss/minps/minsd/minpd)

4. Операнд №1 (то же самое как и вариант 3, но наоборот)
(нигде не встречается)

5. Если любой из операндов NaN, возвращать default NaN
"заражаем ошибкой, но константой, ибо так проще"
(ARM NEON - VMIN.F32)

6. Если один из операндов QNaN, возвращать операнд №2. Если один из операндов SNaN, возвращать его же, сконвертированного в QNaN
"QNaN - пусто, SNaN - неверно"
(IBM POWER, VSX)
Ремарк: При этом VMX/AltiVec работают по варианту 1 (возвращать SNaN), хотя intrinsics у них такие же. Т.е. это как если бы Интел решил в AVX переделать min из SSE

7. ни NaN, ни Inf не поддерживаются, результат - undefined (по ISA). На практике возвращается -FLT_MAX (внезапно!), но вообще может быть хоть битовый мусор
"для 3д графики всё равно надо в итоге что-то нарисовать, не кормите туда NaNы"
(AMD 3dnow!, также какие-то старые GPU)

8. min(NaN, -Infinity) = NaN, max(NaN, -Infinity) = -Infinity
"Для стабильной сортировки floating-point колонок в БД"

Вот, вроде всё. Источники: Marat Dukhan, vit_r, IEEE 754 :)

This entry was originally posted at http://wizzard.dreamwidth.org/409296.html. It has comment count unavailable comments. Please comment there using OpenID.

If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

dememax

May 2023

S M T W T F S
 123456
78910111213
14151617181920
21 2223 24252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 3rd, 2026 07:43 pm
Powered by Dreamwidth Studios