powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / синус в VC++
18 сообщений из 18, страница 1 из 1
синус в VC++
    #33832609
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишу так:
Код: plaintext
1.
edit=sin(edit);
UpdateData(false);
в рез-те напр. sin 90 получаем не 1, а 0.89393....
как правильно вычислить синус?
...
Рейтинг: 0 / 0
синус в VC++
    #33832622
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуйте вычислить синус от Пи/2.
...
Рейтинг: 0 / 0
синус в VC++
    #33832708
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну да, так практически 1, но если писать в стиле обычного калькулятора: 90, потом кнопка sin, то выдается всякая хрень
...
Рейтинг: 0 / 0
синус в VC++
    #33832751
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эххххну да, так практически 1, но если писать в стиле обычного калькулятора: 90, потом кнопка sin, то выдается всякая хрень

Необходимо преобразовывать градусы в радианы
...
Рейтинг: 0 / 0
синус в VC++
    #33832757
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
например в своем калькуляторе пишу: 20, жму sin. ответ: 0,912945.... в настоящем калькуляторе ответ такой: 0,342020..... т.е. полное расхождение.
...
Рейтинг: 0 / 0
синус в VC++
    #33832761
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а какой ф-ей?
...
Рейтинг: 0 / 0
синус в VC++
    #33832763
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эххххнапример в своем калькуляторе пишу: 20, жму sin. ответ: 0,912945.... в настоящем калькуляторе ответ такой: 0,342020..... т.е. полное расхождение.

rad=grad*(2*pi)/360=grad*pi/180
...
Рейтинг: 0 / 0
синус в VC++
    #33832855
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, спасибо, так все работает. только косинус хитро считается: cos 20, 60, 85 и т.д. четко считается, а 90 выдает вместо нуля ответ: 6.12303176911189e-017
...
Рейтинг: 0 / 0
синус в VC++
    #33832886
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эххххда, спасибо, так все работает. только косинус хитро считается: cos 20, 60, 85 и т.д. четко считается, а 90 выдает вместо нуля ответ: 6.12303176911189e-017

;) Почти ноль.

Не ноль, потому-что, тригонометрические функции вычислятся скорее всего из рядов (через тангенс половинного аргумена). А так как ряд конечный (для идельного случая нужен бесконечный), то отсюда и неточности. + погрешности
...
Рейтинг: 0 / 0
синус в VC++
    #33832890
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так же как например тангенс 180 у меня не 0, а -1.22460635382238e-01
...
Рейтинг: 0 / 0
синус в VC++
    #33832902
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как лучше устранить эти погрешности, что бы эти устранения не повлияли на рез-ты других вычислений?
...
Рейтинг: 0 / 0
синус в VC++
    #33832924
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эхххха как лучше устранить эти погрешностиа ты флоат или дабл используешь ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
синус в VC++
    #33832954
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эхххха как лучше устранить эти погрешности, что бы эти устранения не повлияли на рез-ты других вычислений?

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

Сделай округление перед выводом пользователю. Твое e-017 - запросто превратится в 0, если ты округлишь, хотябы до 15-го числа после запятой. Достаточно хорошая точность для пользователя, и он не будет голову ломать, что за кракозябены ты ему выдал.
...
Рейтинг: 0 / 0
синус в VC++
    #33833011
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
использую дабл.
...
Рейтинг: 0 / 0
синус в VC++
    #33833316
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
округлил называется
Код: plaintext
1.
2.
3.
4.
5.
...
edit=cos(rad);
double ostatok = edit-int(edit);  
edit = int(edit) + int(ostatok*pow( 10 ,  15 ) +  0 . 5 )/pow( 10 ,  15 ); // okruglili
UpdateData(false);
теперь считается косинус 90 правильно, то есть 0, зато все остальное как попало с буквой Е
извините за тупость, но как это правильно пишется?
...
Рейтинг: 0 / 0
синус в VC++
    #33833414
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы выводилось без e можно использовать %1.15f при выводе (на счет буквы могу ошибится).
Ты уверен, что число умноженное на 10^15 влезет в int, который максимум 4 байта без бита, а это в районе 2*10^9?

Сделай edit+0.5*pow(15,10) и отсекай выводом.
...
Рейтинг: 0 / 0
синус в VC++
    #33834057
эхххх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ээээ, а как именно это написать? где написать эту строку edit+0.5*pow(15,10) и как отсечь выводом?
...
Рейтинг: 0 / 0
синус в VC++
    #33834653
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не много ошибся надо pow(10, -15).

Можно так писать
Код: plaintext
printf("%1.15f", edit+ 0 , 5 *pow( 10 ,- 15 ));
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / синус в VC++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]