Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Вычисления с малыми числами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ двумерный массив http://www.cyberforum.ru/cpp-beginners/thread84545.html
Ввести двумерный массив А (5*2).Определить в нем сумму модулей отрицательный элементов. Язык С++.Помогите, пожалуйста.Нужно на экзамен.
C++ Файл, содержащий структуру Ребят, помогите решить задачу. Дано следующее условие: (оформить нужно в С) Дан файл, содержащий сведения о книгах: фамилию автора, название книги и год издания. По запросу определить имеется ли... http://www.cyberforum.ru/cpp-beginners/thread84534.html
Исcледованние абстрактных типов данных C++
Нужно сделать такое задание, кто может помогите сделать. Написать 2 программы на Си которые состоит с следующих дейтсвий 1.Описания элемента структуры данных согласно с вариантом (табл.1)....
C++ отсортировать массив модифицированным методом простого выбора
отсортировать массив модифицированным методом простого выбора. а затем применить этот масив для решения задачи. Дана целочисленная последовательность {ai} верхний индекс n нижний 1. Получить...
C++ Отсортировать массив методом Шелла http://www.cyberforum.ru/cpp-beginners/thread84481.html
Помогите пожалуйста! мне нужно отсортировать массив методом Шелла, а потом с помощью этого отсортированного массива решить задачу. Если данная последовательность не упорядочена ни по неубыванию,...
C++ Комплексные числа.. Помогите пожалуйста... срочно нужно решение этой задачки.. Описать класс для работы с комплексными числами. Определить методы для сложения, умножения чисел. Заранее спасибо... подробнее

Показать сообщение отдельно
Telliax
0 / 0 / 0
Регистрация: 11.01.2010
Сообщений: 5
11.01.2010, 19:29  [ТС]
Цитата Сообщение от snake32 Посмотреть сообщение
Кто такие комрады?
К сожалению этих ошибок не избежать пока Вы работаете с "плавающей арифметикой".
Нормальных решений в таких проблемах нет. Старайтесь избегать таких малых(или очень больших) чисел. Используйте, тип double вместо float, тк точность там по идеи в 2 раза больше ибо в 2 раза больше памяти отводится под число. В делфях есть тип Extended - 10 байт, скорее всего в С тоже есть такой, я не в курсе.

Как вариант, предложил бы домножить оба числа на 1е12( чтобы точность была чуть выше) и уже с такими числами работать а при выводе обратно на 1е-12.
Если работаете в цикле то лучше, мне кажется, не суммировать слишком малую величину, а использовать умножение, те:
C++
1
2
3
4
5
6
7
8
double step = 1.0e-25;
double s = 0.0;
for(int i=0; i<100; i++)
{
  // что-нибудь делаем с s
  //s+=step; // не так!!! слишком малое значение
  s=step*i;// наверно так лучше будет, но я не уверен - проверь обязательно =)
}
и вообще float-числа очень опасны, тк никогда нельзя точно сказать какая у них погрешность. Почитайте литературу о стр-ре этого типа и сами всё поймёте.

Добавлено через 1 минуту
ох нифига.... пока писал...три поста уже появилось
Я вполне осознаю, что из себя прелставляют вещественные типы. И думаю, что понимаю с чем связана неточность. Что меня интересует, так это способы, позволяющие этой неточности избежать. Но я так понял, что остается только смириться, комрад/коллега/m8/pal/lad/как тебе будет угодно.
Возможно стоит поискать другой численный метод.
Умножение не сработает, т.к. начальное значение не нулевое.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru