2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5  След.
 
 Re: Тип double в C++
Сообщение07.06.2018, 19:41 


27/08/16
10209
Dmitriy40 в сообщении #1317975 писал(а):
для него не выполняется требование положительности: $+0 \not > 0$. Как и для $-0$ требование отрицательности.
Но $1.0 / 0.0 > 1.0 / -0.0$

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 19:52 
Заслуженный участник


20/08/14
11775
Россия, Москва
Munin в сообщении #1317984 писал(а):
я бы даже сказал, только x86, но не уверен насчёт IA-64
Хм, удивлён, но вот тут говорят что поддерживается: https://www.csee.umbc.edu/portal/help/a ... re/aig.pdf или http://parallel.ru/sites/default/files/ ... 4/ADAG.pdf (5-й раздел, "IA-64 Floating-point Programming Model"). Но и 128 битные числа поддерживаются. На соответствие IEEE 754 не проверял.

realeugene в сообщении #1317990 писал(а):
Но $1.0 / 0.0 > 1.0 / -0.0$
Разумеется $+\infty$ больше $-\infty$, только что это доказывает? Уж положительность/отрицательность нуля не доказывает.
Более того, $+0\equiv 0$ т.к. у них тупо совпадает кодировка с точностью до бита и потому $+0$ никак не может быть положительным числом больше нуля.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 19:58 
Заслуженный участник


27/04/09
28128
Да, тут стоит сказать, что то, что я выше назвал отношениями «порядка» и «равенства», на самом деле не все таковыми являются*. Особенно ситауцию портят NaN’ы, хотя и не ими едиными.

* И вообще как я мог говорить о нескольких разных отношениях равенства? Когда одно из них таким названо, остальные будут не более чем эквивалентностями даже в лучшем случае! Какая ошибка.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 20:07 


27/08/16
10209
arseniiv в сообщении #1317997 писал(а):
Особенно ситауцию портят NaN’ы, хотя и не ими едиными.

Угу. В Питоне, например:
Код:
np.nan != np.nan
но
Код:
np.nan in [np.nan]
Множества также считают положительный и отрицательный нуль одинаковыми, но хранят знак первого добавленного.

-- 07.06.2018, 20:11 --

Dmitriy40 в сообщении #1317995 писал(а):
Более того, $+0\equiv 0$ т.к. у них тупо совпадает кодировка с точностью до бита
Да, так как $1.0 / 0.0 = +\infty$ это значит, что "беззнакового нуля" просто нет.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 20:14 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
realeugene в сообщении #1318002 писал(а):
В Питоне, например
Давайте соблюдать строгость, лады? Это не в самом Питоне, это в NumPy.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 20:19 
Заслуженный участник


20/08/14
11775
Россия, Москва
realeugene в сообщении #1318002 писал(а):
Да, так как $1.0 / 0.0 = +\infty$ это значит, что "беззнакового нуля" просто нет.
Во первых это так только с замаскированными исключениями, иначе будет ошибка деления на ноль и никакой бесконечности не получите.
Во вторых, знак плюс у нуля не говорит о том что $+0$ является положительным числом. Нет, не является, он всё так же ноль, который и не положительный, и не отрицательный, хотя и имеет знак. Поэтому проверки лишь знака недостаточно для установления положительности или отрицательности числа с плавающей точкой (в отличии от целых чисел в дополнительном коде, а ведь ещё и прямой код есть и ещё много разных).
Ну и что и кому Вы тут доказываете? ТС-у бы с обычными числами разобраться, а не с нулями и NaN-ами. Не путали бы вы его, а?

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 20:23 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Dmitriy40 в сообщении #1317995 писал(а):
Но и 128 битные числа поддерживаются. На соответствие IEEE 754 не проверял.

Поддерживаются только программно, но совместимы.

-- 07.06.2018 20:27:40 --

Dmitriy40 в сообщении #1318010 писал(а):
Во вторых, знак плюс у нуля не говорит о том что $+0$ является положительным числом.

Скорее, он говорит о том, что бит знака в этом числе установлен в значение "положительный".

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 20:34 


27/08/16
10209
Aritaborian в сообщении #1318007 писал(а):
Это не в самом Питоне, это в NumPy.

Да нет, это именно в самом Питоне. np.nan имеет класс float. Просто, оказывается, что NaN в множествах и оператором in сравниваются по адресам, в отличие от чисел. Но другой NaN будет иметь другой адрес. А np.nan - это константа.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 20:41 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
realeugene в сообщении #1318014 писал(а):
Да нет, это именно в самом Питоне.
Здесь, канешн, можно спорить до посинения и всё безрезультатно, как всегда, когда спор касается определений. Да, в конечном итоге дело сводится к питоновским типам данных, но изначально-то они определяются в библиотеке NumPy.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 20:48 


27/08/16
10209
Aritaborian в сообщении #1318015 писал(а):
Да, в конечном итоге дело сводится к питоновским типам данных, но изначально-то они определяются в библиотеке NumPy.
float - это встроенный тип. То же самое можно сделать с float('NaN') без всякого NumPy. Присвоив результат переменной.

Например:
Код:
a = float('NaN')
a != a
a in [a, a]
set([a, a, float('NaN')])

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 21:12 
Заслуженный участник


20/08/14
11775
Россия, Москва
Munin в сообщении #1318011 писал(а):
Скорее, он говорит о том, что бит знака в этом числе установлен в значение "положительный".
Да, только этого признака недостаточно для положительности числа. Яркий контрпример: ноль в дополнительном коде для целых чисел. У него тоже знак плюс, однако это именно ноль, а не положительное число (в этом иногда и неудобство проверки на положительность, длинное число на <0 можно проверить одной командой, а вот на >0 надо проверять ещё и =0). А в прямом коде есть и плюс ноль, и минус ноль, и оба целые, и оба не положительные и не отрицательные.
realeugene, это всё скорее для Вас.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 21:36 


27/08/16
10209
Dmitriy40 в сообщении #1318025 писал(а):
А в прямом коде есть и плюс ноль, и минус ноль, и оба целые, и оба не положительные и не отрицательные.


Цитата:
enum class(x) tells which of the following ten classes x falls into:
signalingNaN
quietNaN
negativeInfinity
negativeNormal
negativeSubnormal
negativeZero
positiveZero
positiveSubnormal
positiveNormal
positiveInfinity


Это цитата из IEEE 754-2008. Как видите, класс нуля называется "positive" или "negative" наравне с аналогичными классами нормальных чисел, денормализованных чисел и бесконечностей.

И ещё:

Цитата:
Comparisons shall ignore the sign of zero (so +0 = −0). Infinite operands of the same sign shall compare equal.


Стандарт не заморачивается определением, что число есть нуль. Он определяет два различных нуля и правила выполнения операций с ними.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 21:50 
Заслуженный участник


20/08/14
11775
Россия, Москва
realeugene
Класс может называться как угодно. Но для положительного числа должно выполняться неравенство $x>0$$x<0$ для отрицательного), а для $\pm0$ они оба не выполняются. Вот и всё, вопрос закрыт, эти нули не положительные и не отрицательные.
Или приводите точную цитату из стандарта где чётко сказано что $+0$ является минимальным положительным числом. Не имеет положительный знак или принадлежит положительному классу, а является положительным числом.
Заодно укажите расстояние (модуль разности) от этого положительного числа до ровно нуля (без знака). Я сразу напомню, что нулевое расстояние эквивалентно равенству чисел.
Контрпример с дополнительным кодом ("положительный" знак нуля) пропустили мимо ушей, да? Удобно. :facepalm:

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 21:59 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Dmitriy40 в сообщении #1318033 писал(а):
Я сразу напомню, что нулевое расстояние эквивалентно равенству чисел.

С такими заявлениями в машинной арифметике осторожней надо... Отличайте идеальный математический смысл от аппаратной реализации. Например, $+0$ и $-0$ в представлении IEEE 754 разные (побитово) значения, а в $\mathbb{R}$ - нет.

 Профиль  
                  
 
 Re: Тип double в C++
Сообщение07.06.2018, 22:23 


27/08/16
10209
Dmitriy40 в сообщении #1318033 писал(а):
Контрпример с дополнительным кодом ("положительный" знак нуля) пропустили мимо ушей, да? Удобно.
Примеры с представлением целых чисел не имеют отношения к представлениям плавающих чисел. В целых числах нет и бесконечностей, например. Ориентироваться можно только на текст самого стандарта.

В стандарте везде используется термин "negative sign bit". Везде, кроме одного места: при описании операции nextUp. Согласно тексту стандарта, эта операция для наименьшего по модулю представимого отрицательного числа возвращает $-0$, а для $\pm 0$ возвращает наименьшее по модулю представимое положительное число. Так что, я вынужден согласиться, что стандарт не считает $\pm 0$ наименьшим по модулю положительным или отрицательным числом.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 68 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group