История изменений
Исправление den73, (текущая версия) :
На самом деле, потеря деления не так страшна на фоне других проблем.
Основная из них состоит в том, что на самом деле есть много разных арифметических операций, которые нужно уметь различать. Не знаю, согласишься ли ты, но я считаю, что их нужно различать.
Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 1/3 или 0?
В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны. Если программист имел в виду одно, а получилось другое из этого меню, цена такой ошибки может быть от несхождения баланса предприятия до упавшей не на ту страну баллистической ракеты.
С++ позволяет перегружать операции, доопределяя разные виды деления, но нет способа надёжно гарантировать, что будут использованы только операции нужного типа. Чтобы в этом убедиться, нужно проводить рассуждения о коде, зачастую сложные.
ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.
Я хочу пойти дальше и позволить добавление операций деления с разными именами.
Тогда можно будет написать:
печ 1 число_с_2_знаками:делить 3;
Как видишь, от лаконичности записи деления не осталось и следа.
В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:
печ 0.33 кодица/стандартная_арифметика:* 3;
печ 0.33 ф:* 3;
А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.
Исправление den73, :
На самом деле, потеря деления не так страшна на фоне других проблем.
Основная из них состоит в том, что на самом деле есть много разных арифметических операций, которые нужно уметь различать. Не знаю, согласишься ли ты, но я считаю, что их нужно различать.
Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?
В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны. Если программист имел в виду одно, а получилось другое из этого меню, цена такой ошибки может быть от несхождения баланса предприятия до упавшей не на ту страну баллистической ракеты.
С++ позволяет перегружать операции, доопределяя разные виды деления, но нет способа надёжно гарантировать, что будут использованы только операции нужного типа. Чтобы в этом убедиться, нужно проводить рассуждения о коде, зачастую сложные.
ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.
Я хочу пойти дальше и позволить добавление операций деления с разными именами.
Тогда можно будет написать:
печ 1 число_с_2_знаками:делить 3;
Как видишь, от лаконичности записи деления не осталось и следа.
В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:
печ 0.33 кодица/стандартная_арифметика:* 3;
печ 0.33 ф:* 3;
А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.
Исправление den73, :
На самом деле, потеря деления не так страшна на фоне других проблем.
Основная из них состоит в том, что на самом деле есть много разных арифметических операций, которые нужно уметь различать. Не знаю, согласишься ли ты, но я считаю, что их нужно различать.
Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?
В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны. Цена ошибки может быть от несхождения баланса предприятия до упавшей не на ту страну баллистической ракеты.
С++ позволяет перегружать операции, доопределяя разные виды деления, но нет способа надёжно гарантировать, что будут использованы только операции нужного типа. Чтобы в этом убедиться, нужно проводить рассуждения о коде, зачастую сложные.
ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.
Я хочу пойти дальше и позволить добавление операций деления с разными именами.
Тогда можно будет написать:
печ 1 число_с_2_знаками:делить 3;
Как видишь, от лаконичности записи деления не осталось и следа.
В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:
печ 0.33 кодица/стандартная_арифметика:* 3;
печ 0.33 ф:* 3;
А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.
Исправление den73, :
На самом деле, потеря деления не так страшна на фоне других проблем.
Основная из них состоит в том, что на самом деле есть много разных арифметических операций, которые нужно уметь различать. Не знаю, согласишься ли ты, но я считаю, что их нужно различать.
Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?
В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны.
С++ позволяет перегружать операции, доопределяя разные виды деления, но нет способа надёжно гарантировать, что будут использованы только операции нужного типа. Чтобы в этом убедиться, нужно проводить рассуждения о коде, зачастую сложные.
ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.
Я хочу пойти дальше и позволить добавление операций деления с разными именами.
Тогда можно будет написать:
печ 1 число_с_2_знаками:делить 3;
Как видишь, от лаконичности записи деления не осталось и следа.
В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:
печ 0.33 кодица/стандартная_арифметика:* 3;
печ 0.33 ф:* 3;
А вот возможность писать целые файлы без вызова Округл на каждой строке с гарантией, что округление вызывается везде и нигде не вызывается обычная арифметика - это профит, который легко перекрывает небольшие неудобства синтаксиса. В моём языке правила такого рода может гарантировать компилятор.
Исправление den73, :
На самом деле, потеря деления не так страшна на фоне других проблем.
Основная из них состоит в том, что на самом деле есть много разных арифметических операций, которые нужно уметь различать. Не знаю, согласишься ли ты, но я считаю, что их нужно различать.
Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?
В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны.
С++ позволяет перегружать операции, доопределяя разные виды деления, но нет способа надёжно гарантировать, что будут использованы только операции нужного типа. Чтобы в этом убедиться, нужно проводить рассуждения о коде, зачастую сложные.
ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.
Я хочу пойти дальше и позволить добавление операций деления с разными именами.
Тогда можно будет написать:
печ 1 число_с_2_знаками:делить 3;
Как видишь, от лаконичности записи деления не осталось и следа.
В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:
печ 0.33 кодица/стандартная_арифметика:* 3;
печ 0.33 ф:* 3;
А вот возможность писать целые файлы без вызова Округл в 5 разных строчках и не тратить часы (а то и недели) на поиск единственного места, где забыли написать Округл, и баланс стал не сходиться - это профит, который легко перекрывает такие неудобства. В моём языке правила такого рода может гарантировать компилятор.
Исходная версия den73, :
На самом деле, потеря деления не так страшна на фоне других проблем.
Основная из них состоит в том, что на самом деле есть много разных арифметических операций, которые нужно уметь различать. Не знаю, согласишься ли ты, но я считаю, что их нужно различать.
Сколько будет 2 делить на 6? 0.3333333333, 0.33, простая дробь 3/2 или 0?
В разных языках ты можешь получить любой из этих результатов и все они, по своему, правильны.
С++ позволяет перегружать операции, доопределяя разные виды деления, но нет способа надёжно гарантировать, что будут использованы только операции нужного типа. Чтобы в этом убедиться, нужно проводить рассуждения о коде, зачастую сложные.
ocaml имеет отдельную операцию /. для деления целых. Это шаг в верном направлении, на мой взгляд.
Я хочу пойти дальше и позволить добавление операций деления с разными именами.
Тогда можно будет написать:
печ 1 число_с_2_знаками:делить 3;
Как видишь, от лаконичности записи деления не осталось и следа.
В некоторых случаях можно изменить «ядро» языка, исключив стандартные арифметические операции и присоединив вместо них бухгалтерские. Тогда по умолчанию арифметика будет как на калькуляторе, а чтобы применить обычную арифметику, придётся использовать уже обычные операции через префикс, скажем, так:
печ 0.33 кодица/стандартная_арифметика:* 3;
печ 0.33 ф:* 3;