![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
Мне кажется, в данной задаче суть в ошибках округления. Чтобы их уменьшить, можно воспользоваться тем, что в часах для угловой стрелки 360 угловых градусов соответствуют 12 временным часам или 720 временным минутам. Поэтому можно использовать такой вариант:
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Да, уточнил, я думал на флаг RC ориентируется только fistp. А как это округлить 0.9999999 в меньшую сторону и получить при этом 1? Что-то мне неясно. Кстати, вот пример округления до ближайшего целого, это поможет избавиться от погрешности с которой сопроцессор представляет числа в памяти:
На выходе в x имеем 1. Это сообщение отредактировал(а) W4FhLF - 8.1.2007, 19:55 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
1) можно тупо изобрести велосипед
2) достать нормальный компилятор. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Можно так:
floor(num+0.1); или floor (num+0.01) |
|||
|
||||
| Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: 1 Всего: 1 |
||||
|
||||
| codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
Frekenbok, а вариант
Mayk, чем не устраивает? |
|||
|
||||
| Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: 1 Всего: 1 |
Все-таки в 1 случае из 25 вывел неверно Можно ли просмотреть значения переменных С++ в дебаггере наподобие ассемблера? чтобы видно было, какое число получается в ячейке памяти? W4FhLF, кстати, твой вариант не сработал, надо как-то подгонять под мои данные, наверное. У меня double num вместо float f. Не знаю, имеет ли это значение, наверное, да. До программирования сопроцессора еще не дошло дело. Пока только процессор. Добавлено @ 07:36 А почему, кстати, в моем варианте число именно меньше 1 (0.99999999), а не больше (1.000000000024)? В скобках я к примеру указываю. |
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Ну имеет конечно, double занимает 8 байт, а float 4. Так вот попробуй:
На выходе в x получаем 1. Что и требовалось доказать Добавлено @ 08:11
А оно почти всегда будет чуть меньше, кроме тех случаев, когда ты сохраняешь периодичную, с точки зрения двоичной системы, дробь(0.125 или 8.625 например). Это погрешность при переводе десятичных дробей в двоичные. Это сообщение отредактировал(а) W4FhLF - 10.1.2007, 08:35 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| codelord |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
ну вот от меня еще вроде работает, надеюсь и у тебя тоже будет.
Добавлено @ 08:21
наведи каретку на переменную и ctrl + f5 по моему вроде так |
||||||
|
|||||||
| Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: 1 Всего: 1 |
Тогда получается, что если у меня число 0.999999, то мне, наоборот, надо округлять "вверх"! А вот вариант codelord то, что надо. Спасибо. В Turbo C++ 3.0 не работает. Вообще, всем спасибо за помощь. Думаю, тему можно закрыть |
|||
|
||||
| Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: 1 Всего: 1 |
Кстати, очень хороший вариант. Только по условию задачи угол в радианах. Я ввожу в градусах, чтобы потом легче было сопоставить угол и время. Отсюда и вылезают всякие погрешности округления |
|||
|
||||
| xKrIvEdKox |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 31.5.2009 Репутация: нет Всего: нет |
x:=round(x*100)/100;
|
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 1 Всего: 41 |
удалил...
Это сообщение отредактировал(а) Dmi3ev - 1.6.2009, 01:00 -------------------- |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |