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

Округление чисел - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 366, средняя оценка - 4.81
Виктор_Сен
 Аватар для Виктор_Сен
30 / 23 / 1
Регистрация: 01.08.2011
Сообщений: 176
09.08.2011, 17:44     Округление чисел #1
Здравствуйте! Не подскажите, как в си++ округлять числа? Дело в том, что я нашёл в справочнике Герберта Шилдта функции округления - round и trunc. Но когда я их вставил в программу, компилятор заругался. А ещё хотелось бы округлять до сотых, до тысячных и т. д. И ещё, округление типа
C++
1
2
double a=3.14;
int b=(int)a;
как происходит, отбрасыванием дробной части, или математически. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SLASTY_73
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 20
24.09.2013, 22:30     Округление чисел #21
По этому заданию нужно написать программу. Подскажите хоть что нибудь,я вообще не представляю как ее писать.
Вычисления со строгим учетом предельных абсолютных погрешностей
Этот метод предусматривает использование правил вычисления предельных абсолютных погрешностей. При пооперационном учете ошибок промежуточные результаты, так же как и их погрешности, заносятся в специальную таблицу, состоящую из двух параллельно заполняемых частей - для результатов и их погрешностей.
Пример 2.
В табл. приведены пошаговые вычисления со строгим учетом предельных абсолютных погрешностей по той же формуле, что и в примере 1, и в предположении, что исходные данные а и b имеют предельные абсолютные погрешности дельта а = дельта b = 0,0005 (т.е. у а и b все цифры верны в узком смысле).
Промежуточные результаты вносятся в таблицу после округления до одной запасной цифры (с учетом вычисленной параллельно величины погрешности); значения погрешностей для удобства округляются (с возрастанием!) до двух значащих цифр. Проследим ход вычислений на одном этапе.
Миниатюры
Округление чисел  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
24.09.2013, 22:42     Округление чисел #22
Цитата Сообщение от Виктор_Сен Посмотреть сообщение
Да, но у меня почему-то на trunc() компилятор ругается. Компилятор Микрософт.
Функция trunc появилась в языке C++ начиная со стандарта С++11.
А вообще тут пример в четырьмя стандартными функциями (round, floor, ceil, trunc)
SLASTY_73
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 20
30.09.2013, 21:53     Округление чисел #23
на картинке есть таблица в этой таблице указаны а,в,с,их погрешности и действия с ними. мне нужно написать программу которая бы вычисляла вот эти погрешности чисел,выполняла действия с числами и округляла их с учетом погрешностей.и нужно еще погрешность действий по правилам вычислять,это можно как нибудь реализовать???
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 10:04     Округление чисел #24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <fstream>
#include <stdio.h>
#include <cstdio>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
   
string IntToStr(double Val)
{      
    string result;
    std::stringstream ost;
    ost << std::fixed << std::setprecision(20) << ( 22.0 / 7.0 );
    ost << Val;
    result = ost.str();
    return result;
}
 
double Round(double Argument, int Preception)
{
    double s,result;
    string z;
    int znak,k,i;
    znak=fabs(Argument)/Argument;
    Argument=fabs(Argument);
    z=IntToStr(Argument);
    k=z.size()-2;
    Argument=Argument*pow(10.0,double(Preception));
    s=0.5;
    for (i=1;i<=k-2;i++)
        s=s+s*pow(10,double(-i));
    result=znak*floor(Argument+s)/pow(10.0,double(Preception));
    return result;
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    double n;
    cout <<"Введите число!-----> ";cin >>n;
    cout <<"\nЧисло после округления"<<Round(n,2);
    getchar();
    getchar();
    return 0;
}
вот фрагментик реально округляющий числа по математическим правилам, все представленные ранее варианты дадут ошибку например при округлении до 2х знаков число 0.4444444445
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
27.10.2013, 10:31     Округление чисел #25
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
вот фрагментик реально округляющий числа по математическим правилам, все представленные ранее варианты дадут ошибку например при округлении до 2х знаков число 0.4444444445
Хм.
Введите число!-----> 0.4444444445

Число после округления0.45
Считаешь, что результат получился по математическим правилам? У математика здесь бы 0.44 получилось.
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 10:45     Округление чисел #26
Цитата Сообщение от grizlik78 Посмотреть сообщение
Хм.

Считаешь, что результат получился по математическим правилам? У математика здесь бы 0.44 получилось.
С чего????? учитывается последняя цифра округляешь постепенно до нужного числа и получается 0.45 поразмысли немного)

Добавлено через 1 минуту
последняя 5ка дает нам в следующей цифре 5ку итд до нужного знака
и это по математическим правилам округления...
grizlik78
Эксперт С++
 Аватар для grizlik78
1887 / 1419 / 103
Регистрация: 29.05.2011
Сообщений: 2,967
27.10.2013, 10:52     Округление чисел #27
Цитата Сообщение от Alex_Skripa Посмотреть сообщение
последняя 5ка дает нам в следующей цифре 5ку итд до нужного знака
и это по математическим правилам округления...
Таких математических правил нет. Это кто-то тебя обманул.
Абсолютное значение разности между точным значением и округлённым не должно быть больше половины разряда, до которого производится округление.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 11:02     Округление чисел
Еще ссылки по теме:

Округление чисел С++ C++
Округление до 0,5 C++
Округление чисел при решении СЛАУ C++
Округление положительных чисел с плавающей точкой C++
Округление C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
27.10.2013, 11:02     Округление чисел #28
Цитата Сообщение от grizlik78 Посмотреть сообщение
Таких математических правил нет. Это кто-то тебя обманул.
Абсолютное значение разности между точным значением и округлённым не должно быть больше половины разряда, до которого производится округление.
Да я сам себя обманул! Не знаю откуда я себе это в голову вбил...
Yandex
Объявления
27.10.2013, 11:02     Округление чисел
Ответ Создать тему

Метки
округление
Опции темы

Текущее время: 01:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru