LINUX.ORG.RU

c++

Там же оно имплементейшн дефайнд, емнип.

ya-betmen ★★★★★
()

Таки общего мнения нет. https://torstencurdt.com/tech/posts/modulo-of-negative-numbers/

mod vs. rem каждый интерпретирует, как может.

TL;DR:

Language13 mod 3-13 mod 313 mod -3-13 mod -3
C1-11-1
C#1-11-1
C++1-11-1
Elixir1-11-1
Erlang1-11-1
Go1-11-1
Java1-11-1
Javascript1-11-1
Kotlin1-11-1
Nim1-11-1
PHP1-11-1
Rust1-11-1
Scala1-11-1
Swift1-11-1
Crystal12-2-1
Haskell12-2-1
Lua12-2-1
Python12-2-1
Ruby12-2-1
Dart1212
Zig @rem1-1errorerror
Zig @mod12errorerror
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от beastie

каждый интерпретирует, как может.

а ещё каждый округляет, как может ©.

Короче и математики и погромисты дурят народ как могут :)

quickquest ★★★★★
()

Крутой топик. Всё время хотел погуглить эту тему, но забывал, а без знаний добивал числа до положительного чтобы получить определённое поведение.

unDEFER ★★★★★
()
Последнее исправление: unDEFER (всего исправлений: 1)
Ответ на: комментарий от unDEFER

Недавно делал сложную логику с модулями отрицательных чисел. По причине дедлайна оставил «как есть». Не стал даже разбираться, почему работает.

Mirage1_
()

Вообще, по-хорошему, с точки зрения математики, должно быть:

b * (a / b) + (a % b) == a

Иначе это не остаток от деления, а какая-то фигня.

На моей машине и для питона, и для плюсов это равенство истинно.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)

меня тоже поражает что 30 лет прошло, а комп не может работать как калькулятор ибо «ооо, ну там же флоат блаблабла».

кругом с математикой (даже базовой) все через одно место.

mrdeath ★★★★★
()

Почему, в python:

Потому что питонисты - альтернативно-одаренные.

Psilocybe ★★★★
()

Открой для себя модуль Decimal, и твое представление о питоне станет мягким и шелковистым.

Virtuos86 ★★★★★
()
Ответ на: комментарий от KivApple

В a % b есть определенный произвол, так как с т.з. математики любой представитель класса эквивалентности будет корректным результатом.

Другое дело a / b. Это точная нижняя грань в целых числах. Следовательно a % b в нескучном язычке должно быть всегда неотрицательным числом >=0 && < abs(b), что бы выполнялось:

b * (a / b) + (a % b) === a
Psilocybe ★★★★
()
Последнее исправление: Psilocybe (всего исправлений: 1)
Ответ на: комментарий от mrdeath

Ну так используй decimal типы. В нормальных и относительно нормальных языках они есть.

Shadow ★★★★★
()
Ответ на: комментарий от beastie

ага, потому в bc 10/3 равняется 3м если запустить без -l :) а 10/4 – 2.500000000

Все для людей.

mrdeath ★★★★★
()
Ответ на: комментарий от mrdeath

меня тоже поражает что 30 лет прошло, а комп не может работать как калькулятор ибо «ооо, ну там же флоат блаблабла».

Хрен ли не может? Просто не используй IEEE754 для расчётов. Практически каждый язык предоставляет средства для десятичной арифметики с дробями.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

я же говорю, оно то все можно, но «нужно знать куда ударить». сложно понять почему везде какие-то дефолты не для людей.

mrdeath ★★★★★
()

у типона семантика остаток обязательно в между(включая границы) нул>м и на единицу ближе к нулю чем основание деления - т.е целая часть делает приближение к делимому и остаток ближе к нулю чем основание

qulinxao3 ★★
()
Ответ на: комментарий от mrdeath

я же говорю, оно то все можно, но «нужно знать куда ударить». сложно понять почему везде какие-то дефолты не для людей.

Почему не для людей? Примерно в 98% случаев при расчётах дробных чисел IEEE754 вполне себе работает как нужно.

hateyoufeel ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)