2013-12-04 2 views
2

Я совершенно новый для мира Perl, и я застрял в функции sqrt. Застревание Я имею в виду, что функция не возвращает значение, которое оно должно.Perl - Square Root результаты

После чтения текстового файла с информацией о координатах 8 значений хранятся в отдельных переменных ($ x1, $ y1, $ x2, $ y2 и т. Д.). Затем вызывается подпрограмма, которая вычисляет расстояние между точками, а затем другими вещами. Тем не менее, он не делает то, что он должен делать, потому что результаты функции sqrt не те, которые им нужны! Я думал, что это проблема с тем, как переменные были получены и сохранены, но после выполнения sqrt с литеральными значениями он также производит неправильное число.

Ниже приведены значения

-2130.07 207.56 -2084.46 210.76 -1892.78 -2525.74 -1938.39 -2528.93 

А вот расчеты SQRT ...

$side1=sqrt(($x1-$x2)^2+($y1-$y2)^2); 
    $sidecheck=sqrt((-2130.07-(-2084.46))^2+(207.56-210.76)^2); 

Оба $ side1 и $ sidecheck возвращают значение 6.7823 вместо 45.722.

Есть ли способ разобраться в этом? Благодаря!

+0

Проверьте [оператор экспоненции] (http://perldoc.perl.org/perlop.html#Exponentiation). –

ответ

8

В Perl и некоторых других Языки мощность номера не является картой, ее двойной звездочкой. Так что вам нужно написать

$sidecheck=sqrt((-2130.07-(-2084.46))**2+(207.56-210.76)**2); 

^ оператор побитовое исключающее ИЛИ. Чтобы присвоить значение, используйте **

+0

Спасибо! Чувствуй себя совершенно глупо сейчас. – user3065342

+0

Для справки, ['perldoc perlop'] (http://perldoc.perl.org/perlop.html) - ваш переход для операторов Perl. – friedo

Смежные вопросы