Pull to refresh

Comments 14

UFO just landed and posted this here

Это при том что проект сдан и находился в эксплуатации довольно давно. Я все же думаю что разработчик тупо везде щелкал вещественные числа без разбора степень это или просто коэффициент. Ну и мало того не задумываясь о том, что нельзя возводить отрицательные числа в действительную степень (я если честно и сам о таком нюансе не предполагал даже).

И в итоге получилось что Penetration ** 2.0 вызывает переполнение, а Penetration * Penetration нет.

Видимо, дело в том, что для отрицательных чисел определено возведение только в целую степень (с точки зрения контроллера), а 2.0 - число пусть и равное целому, но всё-таки с точки зрения производимых операций вещественное, и какой-то из шагов реализации к этому не приспособлен?

Спасибо за наводку! Хочу попробовать потом сделать возведение в степень целого числа

Как уже сказали - проблема в попытке возведения отрицательного числа в вещественную степень. Дело в том, что обычно она вычисляется по формуле a ^ x = e ^ (x * ln a) , а без перехода в комплексные числа натурального логарифма отрицательного числа не существует.

Функции sqr в этом ПЛК нет?

Спасибо за формулу, теперь стало понятнее! Насчет sqr не в курсе, нужно попробовать. Попробую сделать эксперимент с sqr, и с целой 2, вместо вещественной 2.0

UPD похоже что в контроллере SQR инструкция используется для квадратного корня... Но главное сейчас принцип понятен, почему так, и это уже хорошо))

Только не перепутайте sqr и sqrt - одно из них возведение в квадрат, а второе - взятие квадратного корня

Да, уже перепутал, блин) Исправил в комментарии. Но вопреки устоявшимся традициям, по мануалу именно SQR инструкция для квадратного корня. Но главное есть понимание почему так.

потому что случай довольно интересный,
хотя он описан в школьном учебнике. Нехорошо прогуливать математику! ) А почему тут в показателе степени вообще используется вещественное вместо целого?

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

Чисто математически – в школьном учебнике прямо написано, что нельзя возводить отрицательное число в действительную степень. Вот здесь, например, доступно объясняют.

Благодаря наводке из комментариев, за что очень сильно благодарен комментаторам, я решил все-таки обратиться к мануалу, хотя с этого наверно и стоило начать. В мануале описания для инструкции возведения в квадрат нет, зато есть инструкция для возведения в степень. В блочном виде (Ladder Diagram) это блок XPY (X to the Power of Y), в структурном тексте (ST) как раз и есть та самая инструкция dest := sourceX ** sourceY; И на следующей странице мануала так и пишется If Source X is negative, Source Y must be an integer value or a minor fault will occur.

Sign up to leave a comment.

Articles