![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.05.2012
Сообщений: 5
|
![]()
Я пока новичёк в программировании, но несмотря на это я недавно начал создавать калькулятор. И работая с функцией sin или cos, сталкнулся с такой проблемой: sin(180) или cos(90) они равны 0, но программа выдаёт число, отличное от 0, и записано оно в экспоненциальной форме. Ну в общем, кто работал с sin и cos должен меня понять.
Чтобы не путаться, речь будет идти ТОЛЬКО о sin. Так вот я тут начал думать, как можно сделать так, чтобы выдавал 0. Первое, что пришло мне в голову это floattostrf( ,ffFixed, ,n). Но оно мне сразу непонравилось, так как в ответе будет записано n-чисел после запятой и неважно оно какое (пример: 5,0000 если n=4). Я начал дальше думать. И подошёл к такому решению: Код:
Код:
Значит, как я хочу сделать: Код:
|
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Достаточно было залезть в справку по математическим функциям в Дельфи.
Все тригонометрические функции работают с радианами, а не с градусами. http://ru.wikipedia.org/wiki/Радиан Похвально упорство, с которым вы пытались решить проблему. Решение лежало на поверхности ![]()
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 01.05.2012 в 21:57. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 01.05.2012
Сообщений: 5
|
![]()
Да кстати, забыл написать насчёт этих радиан и градусов. Я перевел радианы в градусы с помощью функции radtograd, предворительно подключив библиотеку Math. При этом cos(60) и sin(30) он выдает 1/2 - ну впрочем как и должно...
Вот только этот косяк с 0 при x=0+-180n для sinи x=90+-180n для cos (n - целое число). Последний раз редактировалось nEm1z1s; 01.05.2012 в 22:22. |
![]() |
![]() |
![]() |
#4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Да уж, странный глюк.
У меня выводит 0, если записываю вот так: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
![]()
Это не глюк это <плавающая точка>.
|
![]() |
![]() |
![]() |
#6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
=master=, можно чуть подробнее)
Почему не получилось сравнить с 0.000001, например?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#7 |
Регистрация: 01.05.2012
Сообщений: 5
|
![]()
ну, да... можно конечно и такой вариант рассматривать, но:
sin(0)=0; sin(180)=-5,42101086242752E-20 sin(360)=1,0842021724855E-19 sin(540)=-3,79470760369927E-19 sin(720)=2,16840434497101E-19 как видно эти значения изменяются ![]() |
![]() |
![]() |
![]() |
#8 |
Ещё не
Форумчанин
Регистрация: 04.01.2010
Сообщений: 517
|
![]()
надо как сказано выше "пихать" в радианах а не в градусах напишите вот это например sin(1.5707963) и это 90 градусов или (pi/2) оно вам покажет 1.
Воображение важнее, чем знания. (Albert Einstein)
![]() Последний раз редактировалось dmitriegorovih; 01.05.2012 в 23:47. |
![]() |
![]() |
![]() |
#9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
В общем, такой костыль:
Код:
При подсчете эти получающиеся значения не должны влиять, так как они ОЧЕНЬ маленькие.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 01.05.2012 в 23:33. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 17.12.2008
Сообщений: 250
|
![]()
а почему ffFixed? из доки Delphi пишут что должно работать
Код:
Ps нет Delphi чтоб проверить |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
sin ,cos,ln,lg,exp,sqr и др. | wanes101 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 22.10.2014 04:24 |
Пусть задано значение X. Найти первое из чисел sin X, sin sin X, sin sin sin X, ... , меньшее по модулю 10-4. | hex_91 | Visual C++ | 1 | 28.04.2012 23:49 |
Паскаль Вычислить у - первое из чисел sin х, sin sin x, sin sin sin x, ..., меньшее по модулю 10-4 | Kikikiss | Помощь студентам | 2 | 25.03.2012 13:58 |
Cos, Sin и непонятности с ними =\\ | Zeraim | Общие вопросы Delphi | 3 | 25.07.2009 01:38 |