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

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


27/08/16
9426
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
11210
Россия, Москва
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
9426
Dmitriy40 в сообщении #1318033 писал(а):
Контрпример с дополнительным кодом ("положительный" знак нуля) пропустили мимо ушей, да? Удобно.
Примеры с представлением целых чисел не имеют отношения к представлениям плавающих чисел. В целых числах нет и бесконечностей, например. Ориентироваться можно только на текст самого стандарта.

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

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

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



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

Сейчас этот форум просматривают: mihaild


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

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