2013-10-07 2 views
10

Стандарт IEEE 754 определяет квадратный корень отрицательного нуля как отрицательный ноль. Этот выбор достаточно прост для рационализации, но другие варианты, такие как определение sqrt(-0.0) как NaN, также могут быть рационализированы и проще реализовать на оборудовании. Если бы страх заключался в том, что программисты напишут if (x >= 0.0) then sqrt(x) else 0.0 и будут укушены этим выражением, оценивающим NaN, когда x - -0.0, то sqrt(-0.0) может быть определено как +0.0 (фактически для этого конкретного выражения результаты будут еще более согласованными).Какой численный алгоритм упрощается, определяя sqrt (-0.0) как -0.0?

Существует ли численный алгоритм, в котором где sqrt(-0.0), определяемый как -0.0, упрощает логику самого алгоритма?

+0

[Статья в Википедии] (http://en.wikipedia.org/wiki/Negative_zero) является достойной. Вероятно, вы должны спросить об этом по адресу math.se –

ответ

0

Единственный математически разумный результат - 0. Существует разумный вопрос о том, должно ли оно быть +0 или -0. Для большинства вычислений это не имеет никакого значения вообще, но существуют некоторые конкретные сложные выражения, для которых результат имеет больше смысла в контексте -0. Точные данные выходят за рамки этого сайта, но в этом суть.

Я могу объяснить еще, когда я не в отпуске, если кто-то другой не избил меня.

+3

Это действительно не ответ. Каковы некоторые выражения, в которых соглашение -0 имеет больше смысла? – pburka

+3

@pburka Примеры приведены в статье «Элементарные функции или много шума из ничего», авторитетная ссылка, которую Стивен указал перед этим вопросом, был вопрос StackOverflow: http://people.freebsd.org/~das/kahan86branch. pdf. По его словам, точные детали выходят за рамки «программирования». Программист должен, по крайней мере, в случае 'sqrt (-0.0)', «Вместо того, чтобы думать о +0 и -0 как о различных числовых значениях, подумайте о своем значном бите как вспомогательной переменной, которая передает один бит информации (или дезинформация) », и доверять математику, что он имеет смысл –

+2

@PascalCuoq: Как ни странно, статья с битным знаком Kahan - это тот, который убедил меня, что' sqrt (-0.0) '' '' '' 'имел бы смысл, для согласованности с способ, которым Кахан определяет комплексный квадратный корень. Если я правильно его читаю, результат вызова CSQRT (на конечном вводе) всегда имеет реальную часть, знак знака которой не установлен. (И я считаю, что это поведение, которое рекомендует C99 Приложение G). IOW, CSQRT всегда отображает квадранты 1 и 2 в квадрант 1 и квадранты 3 и 4 в квадрант 4. (Используя знак нуля для определения квадрантного членства в очевидный способ.) –

Смежные вопросы