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
9116
Цюрих
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
13834
уездный город Н
tonyk_av в сообщении #1465137 писал(а):
Уточняю вопрос: какое число вернуть при делении целых чисел в случае, когда и делимое, и делитель равны нулю?


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

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

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


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

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


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

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


20/08/14
11716
Россия, Москва
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
3124
Уфа
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
11716
Россия, Москва
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
11716
Россия, Москва
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, Супермодераторы



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

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


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

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