что не так с синусами?


#1

столкнулся с решением задачи в которой требуется найти синус.

смотрю таблицу синусов: sin(60)=0.866025

считаю на калькуляторе sin(60)=0,86602540378443864676372317075294

считаю в программе writeln(sin(60));

и получаю ответ: -0.304810621102217

паскаль как то по другому считает синусы???


#2

Мировой стандарт - хранить углы в радианах а не градусах. Синусы в паскале .Net -овские, поэтому они тоже по этому стандарту работают. Как и всё остальное из System.Math..


#3

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


#4

На сколько я знаю - школьных учебников по PascalABC.Net нету. Все для более старых паскалей. А документация есть, и на msdn, и, вроде, даже в основной справке паскаля.


#5

я про учебники по математике

вот что есть в хелпе

function Sin(x: real): real; 
        Возвращает синус числа x

и никаких упоминаний в чем оно считает. Естественно человек привыкший все считать в градусах ожидает тут увидеть ответ в градусах.

и как это теперь перевести в градусы кстати?


#6

Длина окружности - 360 градусов, они же 2π.

Радианы = градусы*π/180

В моём учебнике по алгебре всё с радианами. Не знаю где вы градусы нашли. Только если вы из 9-ого/8-ого/7-ого и ниже класса такое может быть. Там ещё про радианы не рассказывают. Привыкайте к радианам.


#7

Оно есть в документации. Просто читаете не там.

Там не ответ в радианах, а аргумент функции…

Вот документация от прямых конкурентов.

Вот трубопаскакаль.

Вот GNU Pascal.

А можно мне хоть один ЯП, в котором в тригонометрические функции принимают не радианы?..

А насчет того, как это перевести в градусы, предлагаю погуглить.


#8

Тут есть две готовые функции туда и обратно: DegToRad(x: real): real; RadToDeg(x: real): real; Переводят градусы в радианы и наоборот.

begin
  Sin(DegToRad(30)).Println;
  RadToDeg(ArcSin(0.5)).Println
end.

#9

я хотел бы это читать не на МСДН, а в хелпе паскаля

и о чудо в отличии от ПаскальАБС у них с хелпом все в порядке :slight_smile: может стоит поучиться у конкурентов?


#10

Гхм. Вот интересно - а где граница между “надо делать справку для метода, он наш”, и “не надо делать справку, он же из .NET”? Люди, которые тут появляются, просят то справку на Windows Forms, то на System.Threading.Task, то на System.Math… Серьезно, я бы на месте разрабов справку, за пределами внесенных в “стандартный” паскаль модификаций вроде ReadlnInteger, выкинул целиком и полностью, оставив ссылку на русский (переведенный) MSDN.

Не стоит. Они не разрабатывают язык на основе крупной внешней платформы с огромной функциональностью и количеством написанного кода. Им справку написать (самую полную, какая есть) - неделя работы максимум.


#11

и тут мы возвращаемся к вопросу – для кого PascalABC? На кого он позиционируется? На крупных софтверных разработчиков? Сомневаюсь что такие им пользуются. Или на школьников и студентотв? Много школьников полезут на МСДН, а если полезут поймут что там написано? Хотя если данная версия паскаля сделана чисто по приколу то тогда да вы правы и все нормально.


#12

Поправили документацию


#13

В программировании, как и математике, углы всегда задаются в радианной мере. В градусах - это только в школьной математике, да и то не всегда. В любом языке программирования мера для углов всегда радианная. Даже в Экселе, где готовые функции для ячеек. Поэтому всегда можно вывести “на чистую воду” кривую реализацию арифметики, если 4*arctan(1) не совпадает с принятым значением числа “пи”.