2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: 0/0=?
Сообщение26.05.2020, 11:33 
Заслуженный участник
Аватара пользователя


06/10/08
6422
У меня вопрос: а что Ваш интерпретатор делает в случае, когда его просят 1 поделить на 0?

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 11:37 


29/12/13
306
C float и IEEE 754 подразумевает nan в таком случае.
https://www.gnu.org/software/libc/manua ... d-NaN.html
Специально интереса для проверил на ардуино UNO ( это контроллер amega328p компилятор (avr-g++ (GCC) 7.3.0) ).
Отлично делит 0 на 0 и возвращает NaN.
Изображение

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 11:38 
Заслуженный участник
Аватара пользователя


16/07/14
8467
Цюрих
tonyk_av в сообщении #1465143 писал(а):
Я задаю простой вопрос "Какое число?", а мне в ответ про исключения, про 43 и прочее
Я задам еще более простой вопрос: "в каком году умерла у швейцара его бабушка?"
Не всякий грамматически корректный вопрос является осмысленным. В частности, ваш не является.

(Оффтоп)

tonyk_av в сообщении #1465153 писал(а):
верни тему к математикам
Я думаю, что скоро вернут - в CS своего пургатория нет. Хотя, может быть, больше подходит Пургаторий (Св)?..

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 11:38 


20/03/14
12041
tonyk_av
Тут нет математики. Программирование есть, а математики нет. Вам правильно говорят.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 11:58 
Аватара пользователя


11/12/16
13310
уездный город Н
tonyk_av в сообщении #1465137 писал(а):
Уточняю вопрос: какое число вернуть при делении целых чисел в случае, когда и делимое, и делитель равны нулю?


Ответ, хотя бы из википедии (болд мой):

Цитата:
Принципиально различны последствия деления на ноль в целой и вещественной арифметике:

Попытка целочисленного деления на ноль всегда является критической ошибкой, делающей невозможным дальнейшее исполнение программы. Она приводит либо к генерации исключения (которое программа может обработать сама, избежав тем самым аварийной остановки), либо к немедленной остановке программы с выдачей сообщения о неисправимой ошибке и, возможно, содержимого стека вызовов.


Поэтому ни о каких "дальнейших вычислениях" не может идти речи.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 12:57 
Заслуженный участник
Аватара пользователя


01/08/06
3054
Уфа
Можно ещё взять пример с процессоров семейства Intel x86. Их можно вынудить возвращать значение, не вызывая остановку программы или исключение. В этом случае (не только для 0/0, но и для любой другой операции, которая не может быть корректно выполнена) они возвращают "неопределённое целое", которое определяется как минимально возможное отрицательное значение целевого типа. Например, для 32-битных значений это будет $-2^{31}$, для 16-битных — $-2^{15}$. Это отражено в официальной документации. Поскольку нет никаких сомнений, что в разработке процессоров Intel участвовали достаточно квалифицированные математики, и они не возражали против такого поведения, вы можете со спокойной совестью взять его за образец.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 14:43 
Заслуженный участник


20/08/14
11177
Россия, Москва
tonyk_av
Вернуть осмысленное число нельзя, это когда-нибудь обязательно вылезет критической ошибкой и случится пожар/наводнение/взрыв/КЗ и т.п. И не исключено что со смертельным исходом. Оно Вам надо, брать на себя такую ответственность? Ведь применить этот контроллер могут где угодно.
Самое логичное что можно сделать — вернуть ровно то же, что и при делении ненулевого числа на ноль. Т.е. вне зависимости от числителя.
Разумеется поведение функции в этом случае должно быть обязательно подробно документировано, это [частично] снимет ответственность за последствия.

worm2 в сообщении #1465175 писал(а):
Поскольку нет никаких сомнений, что в разработке процессоров Intel участвовали достаточно квалифицированные математики,
Очень даже есть такие сомнения. Стивен Морс как я понял совсем не математик, а 8086 разрабатывал он.
worm2 в сообщении #1465175 писал(а):
Их можно вынудить возвращать значение, не вызывая остановку программы или исключение. В этом случае (не только для 0/0, но и для любой другой операции, которая не может быть корректно выполнена) они возвращают "неопределённое целое", которое определяется как минимально возможное отрицательное значение целевого типа. Например, для 32-битных значений это будет $-2^{31}$, для 16-битных — $-2^{15}$. Это отражено в официальной документации.
Сошлитесь пожалуйста на эту самую официальную документацию. Я в документе Intel® 64 and IA-32 Architectures Software Developer’s Manual от июля 2017 (впрочем как и в текущей от октября 2019) ничего подобного не нашёл. Более того, для целочисленных команд деления там прямо проверяется условие равенства нулю знаменателя и если это так, то больше ничего не делается кроме возврата исключения. Так что ни о каком возврате числа речи не идёт в принципе. Т.е. это возможно не поведение процессора, а поведение уже обработчика исключений, а их могут писать кто угодно и тогда привязывать это к рекомендациям самой Intel некорректно. Потому и хочется понять где Вы это видели.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 16:06 
Заслуженный участник
Аватара пользователя


01/08/06
3054
Уфа
Dmitriy40 в сообщении #1465191 писал(а):
Сошлитесь пожалуйста на эту самую официальную документацию.
Я вот здесь нашёл: https://xem.github.io/minix86/manual/intel-x86-and-64-manual-vol1/o_7281d5ea06a5b67a-204.html
Вот ещё: https://www.felixcloutier.com/x86/fist:fistp (но тут без уточнения, что такое "integer indefinite value")
Понятно, что на официальную документацию это не очень тянет, но процессор именно так работает при маскированных исключениях FPU, и где-то это всё равно должно быть документировано.

-- Вт май 26, 2020 18:13:29 --

А, вот, кажется, в официальной документации нашёл:
https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4.html
Параграф 8.2.1 "Indefinites" (стр. 8-14 Vol. 1)

-- Вт май 26, 2020 18:20:50 --

Только теперь понял, что я в самом начале не указал, что речь идёт о сопроцессоре x87, а не о командах целочисленного деления. Виноват :oops:

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 16:22 
Заслуженный участник


20/08/14
11177
Россия, Москва
worm2
Простите, но это действие при сохранении QNaN в память в целочисленном формате. Не поведение при исключении #DE (Division Error). Да, согласен, при попытке сохранить в целое он выдаст странное, но сама операция деления выдаст честный QNaN.
Кроме того, это для FPU, а целочисленные команды деления есть и в CPU (DIV, IDIV), и они никакого QNaN не могут выдать в принципе, только исключение #DE. И если оно замаскировано, то результат операции не определён. Если что, то команда DIV описана на стр.889 (Volume 2, Chapter 3, раздел 3.2 INSTRUCTIONS (A-L), пункт DIV) документа Intel. Там прям первым же действием проверка знаменателя и всё, привет #DE.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 16:39 


29/12/13
306
div, idiv - #DE . Но никто не говорил, про что эта тема конкретно.

Например в javascript возвращается NaN ,
кто сомневается может в консоли браузера проверить.
Используется синтаксис Javascript
div=function(a,b) {return a/b; } ;
console.log("0/0="+div(0,0));
//0/0=NaN
 


Я слышал(о существовании) и видел в продаже, контроллер Iskra JS, возможно там тоже NaN будет.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 17:12 
Заслуженный участник


20/08/14
11177
Россия, Москва
Seman в сообщении #1465234 писал(а):
Но никто не говорил, про что эта тема конкретно.
ТС говорил:
tonyk_av в сообщении #1465137 писал(а):
Уточняю вопрос: какое число вернуть при делении целых чисел в случае, когда и делимое, и делитель равны нулю?

И я не вижу ничего лучше уже озвученного:
Xaositect в сообщении #1465159 писал(а):
У меня вопрос: а что Ваш интерпретатор делает в случае, когда его просят 1 поделить на 0?
Dmitriy40 в сообщении #1465191 писал(а):
Самое логичное что можно сделать — вернуть ровно то же, что и при делении ненулевого числа на ноль. Т.е. вне зависимости от числителя.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 17:39 


29/12/13
306
Dmitriy40 в сообщении #1465244 писал(а):
ТС говорил:

Так ничего конкретного ни про то какие числа, ни про платформу он не написал.
$0/0$ это неопределённость. Возвращать надо не число, а Not a Number. Для арифметики с плавающей точкой это норма. И для неявной типизации тоже, как в javascript. На многих платформах нет div, для той же avr, например, atmega и arduino нету, а например деление $0/0$ для int даст -1 (ну у меня на atmega328p так) .

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 20:01 


10/11/13
46
Xaositect в сообщении #1465159 писал(а):
У меня вопрос: а что Ваш интерпретатор делает в случае, когда его просят 1 поделить на 0?

MAX_INT и флаг ошибки.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 20:03 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Ну вот и делайте то же самое. Кода меньше, а с точки зрения математики $0/0$ такое же некорректное выражение, как и $1/0$.

 Профиль  
                  
 
 Re: 0/0=?
Сообщение26.05.2020, 20:31 


10/11/13
46
Я ж ведь не просто так спросил. И не зря задал вопрос математикам, а не программистам.

Встречались 2 варианта поведения в ситуации целочисленного деления ноль на ноль:
а) возвращался 0;
б) возвращался 1.

Вот вариант с MIN_INT не встречал, поэтому с интересом почитал worm2 и Seman. Разумность варианта б) подтвердил EUgeneUS (математик!).

И не нужно привязываться к языкам и платформам, важно было знать, что по этому вопросу скажут именно математики.

-- 26.05.2020, 22:37 --

Seman в сообщении #1465254 писал(а):
Dmitriy40 в сообщении #1465244 писал(а):
ТС говорил:

Так ничего конкретного ни про то какие числа, ни про платформу он не написал.

Как не написал? А это?

Цитата:
Уточняю вопрос: какое число вернуть при делении целых чисел в случае, когда и делимое, и делитель равны нулю?


И не цепляйтесь к платформе. Интересует результат с точки зрения математики. Я ж не зря сетую, что вопрос перенесли от математиков к программистам.

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

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



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

Сейчас этот форум просматривают: Facebook External Hit [crawler]


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

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