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

float переменная - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не удается запустить программу http://www.cyberforum.ru/cpp-beginners/thread318110.html
Help! Приложения Windows Forms При нажатии F5 выдает ошибку (Не удается запустить программу "c:\Users\qwe\Documents\Visual Studio 2008\Project\forms\Debug\forms.exe".) а в других компах программа идет отлично
C++ CLASSLIB в BORLAND C++. У кого-то теория по этой теме есть? Мне надо для экзамена? Библиотека контейнерных классов CLASSLIB в BORLAND C++. http://www.cyberforum.ru/cpp-beginners/thread318109.html
C++ ошибка 0xc000007b
Ошибка при запуске приложения (0xc000007b). Для выхода из приложения нажмите кнопку "OK". помогите что эта за ошибка и как исправить? это при запуске программы созданное через Microsoft Visual C++ 2008 Express Edition. Приложения Windows Forms.
Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы C++
Здравствуйте! Помогите написать 3 программмы на C++ на задачи с двумерными массивами 3. Дана матрица размера M x N. Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы (при этом поменяются местами строки с номерами 1 и M, 2 и M – 1 и т. д.) Надеюсь на вашу помощь и поддержку :) Не нужно в чужой теме задавать вопросы, напрямую с ней не связанные.
C++ Пишу конвертер: число в строку http://www.cyberforum.ru/cpp-beginners/thread318081.html
Пишу простенький конвертер, переводящий числа в слова. Проектирование на начальном этапе находится, поэтому функции постепенно дорабатываю. Сейчас прога компилиться нормально и адекватно реагирует на ввод (плюёт в консоли ерорры, где надо) - прога может адекватно отрегировать на ввод строки, содержащей нецифры. Но как только вводится просто цифра, прога не выводит ничего, а точнее выводит...
C++ Компилятор? Вот Visual Studio это IDE а какой в нем компилятор? название его скажите плз) подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2011, 11:53     float переменная
В статье http://democoder.ru/article/14, на которую ссылается pito211 в сообщении #2, ошибка в разделе о вычитании:
>>>>>>>>>>>>>>>>>>>>>>>начало цитаты>>>>>>>>>>>>>>>>>>>>>>
VII. Осторожнее с вычитанием!

Это наименее точная операции из всех алгебраических в компьютере. Вы должны избегать её где только возможно, особенно остерегайтесь вычитания очень близких друг к другу чисел, потому что из-за ошибки округления они могут выродиться в 0, а если эта разность была в знаменателе, то нетрудно представить, к чему это приведёт.

Е. Волков приводит интересный пример в своей книге "Численные методы":

"Мы должны вычислить sqrt(543)-sqrt(540), где 543 и 540 даны точно. (то есть все их разряды значащие)

Имеем

sqrt(543) = 23.30....


sqrt(540) = 23.23....

Округлим их до трёх разрядов (потому что столько было в исходных данных, а точность может только уменьшаться)

sqrt(543) - sqrt(540) ~ 23.3 - 23.2 = 0.1

Имеем только один значащий разряд в результате.

Избавимся от вычитания искусственным преобразованием:

sqrt(543) - sqrt(540) = 3 / (sqrt(543)+sqrt(540))

(умножили на sqrt(543)-sqrt(540))

Это равняется 3/(23.3+23.2) = 3/46.5 = 0.0645, мы имеем три значащих разряда в результате."
>>>>>>>>>>>>>>>>>>>конец цитаты>>>>>>>>>>>>>>>>>>>>>>>>>>>

Здесь 3/46.5 = 0.0645 неверно, так как 3 получается вычитанием 543 – 540, где числа даны с точностью до единицы, следовательно тройка имеет только одну значащую цифру, и при делении 3/46.5 мы в полученном результате также имеем право оставить только одну, т.е. в частном 0.0645 все цифры недостоверные, а можно писать только 0.1.
Похоже, что и Е. Волков, на которого там ссылаются, также с математикой не в ладах.
Собственно, в том-то и опасность вычитания, что оно может резко уменьшить количество значащих цифр.
 
Текущее время: 17:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru