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

Непонятный результат при математических операциях - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Используя производные классы, определить класс упорядоченного списка. Применить его для построения списка объектов типа Текстовая строка http://www.cyberforum.ru/cpp-beginners/thread1034397.html
Используя производные классы, определить класс упорядоченного списка. Применить его для построения списка объектов типа Текстовая строка.
C++ проигрыватесь с++ не могу найти код самого простого поигривателя на с++ ?! http://www.cyberforum.ru/cpp-beginners/thread1034396.html
метод обратной прогонки C++
Нужно реализовать метод обратной прогонки на с++.МОЖНО ВЗЯТЬ ЛЮБОЙ ПРИМЕР.КТО МОЖЕТ ПОМОГИТЕ!!
C++ Алфавит и сравнение слов
не понял такой вещи a, b, c, d if ("dd" < "cc") cout << "cc > dd" <<'\n'; if ("aa" < "bb") cout << "bb > aa" <<'\n'; Почему?
C++ Двумерные массивы.(доработка) http://www.cyberforum.ru/cpp-beginners/thread1034348.html
Вообщем очень прошу вашей небольшой помощи вот с таким заданием: Дана целочисленная квадратная матрица. Определить: 1) количество строк, не содержащих ни одного нулевого элемента; минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. 1-ое я уже сделал.
C++ Объект задается чертежом Объект задается чертежом: вводятся координаты концов отрезков (вводить по одному отрезку) в динамический массив. Необходим подсчет длины всех отрезков с учетом масштаба (в конце программы выводится сообщение "какой масштаб применить?" и вводится значение: 2; 2.5; 4 или 10) Число узловых точек до 120. Очень прошу помощи.. в долгу не останусь.. подробнее

Показать сообщение отдельно
Bino321
2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 31
09.12.2013, 17:04  [ТС]     Непонятный результат при математических операциях
Цитата Сообщение от CheshireCat Посмотреть сообщение
Кури дискретную математику и представление вещественных чисел в компьютере.

Я не проверял, но, скорее всего, твое а=12345.32 на самом деле представляется в компьютере как 12345.319999999... - тогда, разумеется, по твоему коду получится c=31. Ну и в остальных случаях из "через раз" - аналогично.
А почему тогда 12345.35 представляется как 12345.35, а не 12345.3499999...?

Выяснил что проблема проявляется при конвертировании типов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
 
int main(int argc, char *argv[])
{
    double a=12345.72;
    double b,c;
    c=modf(a,&b);
    cout<<c*100<<endl;
    int q;
    q=static_cast<int>(c*100);
    cout<<q<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Результат работы программы: до конвертирования cout<<c*100<<endl выдает 72. А после конвертирования cout<<q<<endl выдает 71.
Если задать а=12345.78 то и до конвертирования и после результат 78. Логики не вижу(((
Так что проблема все еще актуальна. Рано обрадовался, еще не работает(
 
Текущее время: 19:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru