![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
#include <iostream>
[/color] using namespace[/color] std; int main(int argc, char* argv[]) { double doubleVar = 123.456; doubleVar+=0.000789; cout<< doubleVar<<endl; for (int i=0; i<2; i++) { doubleVar=doubleVar/10; } cout<< doubleVar<<endl; } Результат: 123.457 1.23457 а должен быть: 123.45789 1.2345789 вопрос как с этим боротся? |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Попробуй перед выводом написать
По умолчанию выводит только 6 Тут ты установиш 10 |
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
double doubleVar = 123.000;
cout.precision(30); cout<<doubleVar/10<<endl; Результат: 12.3000000000001 Как с этим боротся? |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Lycifer, ты на счет единицы в конце числа?
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Lycifer, ты почитай теорию относительно вещественных типов. Тогда может быть поймешь, что выводить с точностью выше допустимой для типа совершенно бесполезно. Кстати, можешь еще попробовать тип long double.
|
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Я понемаю что количество разрядов... бла, бла
Просто дело в том что надо как-то это решить(задача такова), есть конечно способ что создать умный класс... но производительность будет просто удачная |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Lycifer, тебе какая точность нужна (сколько значащих разрядов)?
|
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Дело в том что происходит расчёт (sin(n)+sin(n+1)/cos(n)+cos(n+1) и так далее.. ещё там умножение), так что точное количество не знаю, думаю 15 знаков после точки хватит
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Lycifer, тебе какая точность нужна, а не сколько после точки! Это разные вещи.
У чисел 123.0, 0.00005434 и 0.1234 точность одинаковая - 4 знака: 1.230e3 5.434e-5 1.234e-1 То что после "e" - это экспонента и на точность она не влияет. Добавлено через 3 минуты и 6 секунд и вообще, setprecision отвечает за вывод числа, а не за расчеты. |
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
setprecision - насчёт этого так я отвеяал Igor K.
А вот на счёт точности так это m.000000000000001 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Так ты объясни (и сам пойми) с чем ты бороться хочешь? Если надо выводить сколько-то значащих - тебе ответили. Если тебя смущает неточность числа - с этим придется мириться, т.к. бесконечное множество действительных чисел отображается на конечное множество чисел, представимых в ЭВМ. 12.3 точно представить нельзя - либо 12.3000000000001 либо 12.9999999999999. Потому и используются "только-то значащих цифр", что точность вычислений ограничена. Если возьмешь float, будет еще хуже ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |