Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[50.17.63.57] |
|
Страницы: (5) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Навеяно обсуждением в скайпе В C-подобных языках программирования (по крайней мере в С, С++, java, C# - как в других - не в курсе) операция a / b, когда a и b целые выполняет целочисленное деление. Меня удивило, что многие считают такое поведение логичным, несмотря на то, что случайно перепутав типы, заюзать целочисленное деление когда нужно обычное в разы проще (и наверняка все не раз на него наступали), чем обычное когда нужно целочисленное. Лично я считаю, что как в питоне или, прости господи, в паскале - всегда обычное, а для целочисленного надо использовать другой оператор - гораздо логичнее. А как думаете вы?
|
Сообщ.
#2
,
|
|
|
С одной стороны, удобнее другой оператор (как у того же vb есть "/" и "\"), но, уже привык к явному приведению, сишный вриант тоже не плох. Хуже, когда выполняется полноценное деление, затем приходится округлять результат - лишние операции же
|
Сообщ.
#3
,
|
|
|
Цитата VisualProg @ С одной стороны, удобнее другой оператор (как у того же vb есть "/" и "\"), но, уже привык к явному приведению, сишный вриант тоже не плох. Вот я тоже привык. Причём привык так, что использовал обычное деление по ошибке вместо целочисленного в питоне по-инерции после плюсов. Но когда писал на дельфи (до плюсов) - такой ошибки не делал ни разу. Что также говорит в пользу второго варианта. |
Сообщ.
#4
,
|
|
|
Это вопрос не логичности, а принятой в языке системы типов.
|
Сообщ.
#5
,
|
|
|
Цитата Qraizer @ Это вопрос не логичности, а принятой в языке системы типов. Почему? Что принципиально поменяется в плюсовой системе типов с вводом оператора "поделить нацело"? |
Сообщ.
#6
,
|
|
|
Если язык не предназначен для мат.вычислений, пусть типы аргументов определяют тип операции (нефиг юзать магические константы). То бишь как в C
Если предназначен, то... пусть типы аргументов определяют тип операции тоесть, все циферки -- вещественные по-дефолту, но там ещё могут появится комплексные числа, рациональные и ещё куча других. C возможностью зафорсить правильную (желаемую) операцию. |
Сообщ.
#7
,
|
|
|
Цитата negram @ Если язык не предназначен для мат.вычислений, пусть типы аргументов определяют тип операции (нефиг юзать магические константы). То бишь как в C А причём тут магические константы? |
Сообщ.
#8
,
|
|
|
Цитата OpenGL @ Ну как... в реальной жизни обычно используются переменные, уже имеющие какой-то тип. И этот самый тип предопределяет операцию. Если написал "1/2" то ну тебя нафиг А причём тут магические константы? |
Сообщ.
#9
,
|
|
|
Цитата negram @ Если написал "1/2" то ну тебя нафиг А если get_foo() / get_bar()? |
Сообщ.
#10
,
|
|
|
Цитата OpenGL @ ну тогда эти самые ф-ции возвращают правильный тип А если get_foo() / get_bar()? Ну а если например нужно поделить количество резидентной памяти процесса на общее, ну я готов в этом случае добавить приведение типов |
Сообщ.
#11
,
|
|
|
Я за разные операции для целочисленного и "обычного" деления. Соответственно, далее все зависит от системы типов в языке.
|
Сообщ.
#12
,
|
|
|
Цитата negram @ Ну а если например нужно поделить количество резидентной памяти процесса на общее, ну я готов в этом случае добавить приведение типов Ну так это понятно. Я тоже готов Вопрос же не в этом, а в том, почему приведение типов ты считаешь логичным (и, следовательно, более простым с т.з. программиста), нежели введение отдельной операции? |
Сообщ.
#13
,
|
|
|
Цитата OpenGL @ целочисленное деление. С точки зрения математики эта операция полный бред. Программисты конечно могут позволить себе вольности, но есть же предел. Для операции a/b надо a,b преобразовать как минимум в рациональное число и соответственно результат будет такого же типа. Ну дальше можете из результата получить целое число, если вам погрешность округления не важна. |
Сообщ.
#14
,
|
|
|
Цитата OpenGL @ я считаю правильнее использовать всегда целочисленную арифметику, тк она точна (ну, с поправкой на возможные переполнения) и в большенстве случаев её хватает, а плавточка существует не от хорошей жизни и черевата бОльшим количеством подводных камней. Ну, в довесок раньше она была быстрее (ща не думаю, к тому же это мелочь). А вот вводить отдельную операцию для нецелочисленного деления мне кажется странно Вопрос же не в этом, а в том, почему приведение типов ты считаешь логичным (и, следовательно, более простым с т.з. программиста), нежели введение отдельной операции? Соответственно, переходить на вещественные числа следует только, когда это действительно необходимо (вот при мат вычислениях это как-раз практически всегда требуется, поэтому то, что в R по-дефолту именно нецелочисленная арифметика -- это правильно). Добавлено Цитата Pavlovsky @ да ладно Цитата OpenGL @ целочисленное деление. С точки зрения математики эта операция полный бред. Добавлено Цитата Pavlovsky @ даже если не вспоминать что такое рациональное число... Зачем делать три операции вместо одной, да ещё и гонять данные из одного представления в другое? Для операции a/b надо a,b преобразовать как минимум в рациональное число и соответственно результат будет такого же типа. Ну дальше можете из результата получить целое число, если вам погрешность округления не важна. |
Сообщ.
#15
,
|
|
|
Цитата OpenGL @ Вопрос влияния новой операции на систему типов языка некорректен. В нём попутаны местами причина и следствие. Наоборот, отсутствие такой операции является следствием свойств системы типов в C. Поэтому вопрос следовало бы задать в форме "как нужно изменить систему типов, чтобы такая операция была оправдана". Почему? Что принципиально поменяется в плюсовой системе типов с вводом оператора "поделить нацело"? Добавлено Хотя я могу себе представить Палькальное поведение, где мы имеем две разные операции для вещественного и целочисленного деления, но каждая из них неприменима для операндов неверного типа. |