Почему 2 / -2 / 2 равно -2 в OpenSCAD? (Математический порядок операций)

Недавно я занимался более сложной математикой в OpenSCAD и столкнулся с чем-то, что нахожу странным. Возьмем простое математическое выражение: 2 / 2 / 2. На любом языке программирования это будет равно 0,5 (1/2), и OpenSCAD соглашается. Что-то вроде этого: 2 / -2 / 2 также должно быть -0,5 по той же причине. Однако OpenSCAD считает, что это -2. Это эхо(2 / -2 / 2); дает ЭХО: -2. Мой калькулятор, другие языки программирования (и я сам) все говорят, что его -0,5.

Это причуда OpenSCAD, или я упускаю что-то очевидное?

, 👍4

Обсуждение

Проверьте, что (2 / -2) дает вам, @Trish


2 ответа


Лучший ответ:

8

Я подозреваю, что поведение, которое вы видите, является недокументированной функцией (она же ошибка) OpenSCAD. В последнем стабильном выпуске я обнаружил, что если поставить - на любом конце, результат будет -0,5, но в середине мои результаты такие же, как у вас. Однако окружение -2 круглыми скобками приводит к правильному ответу.

Похоже, что круглые скобки превращают математическую операцию в целое число со знаком. Отсюда следует, что операции без скобок выполняются справа налево:

2/2 = 1, минус 1 с минусом, 2/-1 = -2


,

Подано: https://github.com/openscad/openscad/issues/2894, @Joel Coehoorn

И теперь есть [исправление проблемы](https://github.com/openscad/openscad/pull/2895) слился с мастером. Ночные сборки должны правильно обрабатывать это с этого момента., @Joel Coehoorn


4

Я зарегистрировал эту проблему как ошибку в проекте OpenSCAD, и теперь есть исправление, объединенное в master, а также тестовый случай для предотвращения регрессии. С этого момента последние ночные сборки должны корректно справляться с этим.

,