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

Насчёт числа знаков после запятой - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
11.01.2013, 21:54     Насчёт числа знаков после запятой #1
Вот например у меня массив с числами, у которых по 5 знаков после запятой. Как мне (с помощью какой функции или операции) сделать так чтобы у этих чисел, было по 3 знака после запятой двумя способами (сначала округлялось, а вторым способом не округлялось до тысячной. Заметьте мне надо чтобы значение чисел стало таким, а не просто показывалась тысячная доля. Например такие функции как cout.precision и printf мне не помогут.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
13.01.2013, 07:16     Насчёт числа знаков после запятой
  #21

Не по теме:

Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Этот принцип не работал у меня
Если была проблема в сравнении чисел с плавающей точкой, то эту проблему и нужно было решать - вероятно, были ошибки в реализации. Вы же придумали совсем другую сомнительную задачу и потратили на нее время и силы.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.01.2013, 07:18     Насчёт числа знаков после запятой #22
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
Этот принцип не работал у меня
Значит, где-то была ошибка реализации. Потому что именно так и делается. Ведь не "округляется решение", а "ищется решение с заданной точностью".


Цитата Сообщение от Avazart Посмотреть сообщение
глупо терять точность...
Тогда выкинь float и всегда и везде используй double, ведь глупо терять точность. А ещё лучше, используй BCD числа, чтобы уж наверняка в точности не потерять...
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
13.01.2013, 12:41  [ТС]     Насчёт числа знаков после запятой #23
Цитата Сообщение от 0x10 Посмотреть сообщение
Если была проблема в сравнении чисел с плавающей точкой, то эту проблему и нужно было решать - вероятно, были ошибки в реализации. Вы же придумали совсем другую сомнительную задачу и потратили на нее время и силы.
Дело опять же не только в решении проблемы сравнения, а я для себя хотел узнать как присвоить значение тому или иному числу с определённой точностью..


Цитата Сообщение от Deviaphan Посмотреть сообщение
Тогда выкинь float и всегда и везде используй double, ведь глупо терять точность. А ещё лучше, используй BCD числа, чтобы уж наверняка в точности не потерять...
+1
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
13.01.2013, 16:15     Насчёт числа знаков после запятой #24
Цитата Сообщение от Deviaphan Посмотреть сообщение
Тогда выкинь float и всегда и везде используй double, ведь глупо терять точность. А ещё лучше, используй BCD числа, чтобы уж наверняка в точности не потерять..
Не выкидывайте контекст, глупо пытаться округлить теряя при этом точность, а не использовать float.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.01.2013, 16:57     Насчёт числа знаков после запятой #25
Цитата Сообщение от Avazart Посмотреть сообщение
глупо пытаться округлить теряя при этом точность
Реальная ситуация. Нужно было собрать сеточную модель из списка разрозненных треугольников. При этом координаты вершин должны быть заданны с определённой точностью. Генератор объёмной сетки выдавал координаты треугольников на три порядка точнее необходимого. Поэтому сперва точные координаты пришлось округлять до заданной точности, и только потом уже "склеивать" модель из треугольника с округлёнными координатами. Полученная сетка подвергалась обработке сторонней программы. которая была ограничена в точности и если подавать сырые координаты, то результат работы оказывался либо хуже, либо вообще программа падала (из-за неожиданного округления объём, ограниченный сеткой, оказывался не замкнутым или самопересекающимся).
Это я всё к чему... Не стоит категорически утверждать о глупости некоего действия, если в некоторых ситуациях оно необходимо.)
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
13.01.2013, 17:03     Насчёт числа знаков после запятой #26
Так что проблема в большей точности ?

Цитата Сообщение от Deviaphan Посмотреть сообщение
Поэтому сперва точные координаты пришлось округлять до заданной точности, и только потом уже "склеивать" модель из треугольника с округлёнными координатами.
Ну это, как я понимаю, уже вывод...

Цитата Сообщение от Deviaphan Посмотреть сообщение
Полученная сетка подвергалась обработке сторонней программы. которая была ограничена в точности
Так о чем речь если проблема в сторонней программе ?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.01.2013, 17:19     Насчёт числа знаков после запятой #27
Цитата Сообщение от Avazart Посмотреть сообщение
Так о чем речь если проблема в сторонней программе ?
Речь о том, что сторонняя программа работала с числами до е-6, а исходные данные были е-9. И программа их не округляла, а усекала. Из-за чего случались эпик фэйлы. И проблемы сторонних библиотек зачастую приходится решать пользователям этих программ, а не сторонним разработчикам.(


Цитата Сообщение от Avazart Посмотреть сообщение
Ну это, как я понимаю, уже вывод...
Нееее, это только "вход".


Скажем иначе. Если бы не было необходимости в округлении чисел, то в стандартной библиотеки не было бы функций floor и ceil. А раз они есть, то более чем одному разработчику требовалось округление.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
13.01.2013, 17:33     Насчёт числа знаков после запятой #28
Цитата Сообщение от Deviaphan Посмотреть сообщение
Нееее, это только "вход".
Ну тогда могу лишь повторить что это глупо, к погрешности представления float вы добавляете погрешность при округлении и хорошо если погрешности компенсируют друг друга а что если нет ?
( к тому же все равно данные будут в том виде что позволит float т.е опять таки в 0.9999999... или 1.000001 )

Цитата Сообщение от Deviaphan Посмотреть сообщение
Речь о том, что сторонняя программа работала с числами до е-6, а исходные данные были е-9. И программа их не округляла, а усекала. Из-за чего случались эпик фэйлы. И проблемы сторонних библиотек зачастую приходится решать пользователям этих программ, а не сторонним разработчикам.(
Ну так тут именно вывод ( вашей программы ), а тут собственно и
Цитата Сообщение от PoMa_HaB Посмотреть сообщение
cout.precision и printf мне не помогут.
справятся...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.01.2013, 17:37     Насчёт числа знаков после запятой #29
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так тут именно вывод ( вашей программы )
Не-не-не. Моя программа даёт данные той программе. которая давала данные моей...
Пофиг.)))
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
13.01.2013, 17:40     Насчёт числа знаков после запятой #30
Цитата Сообщение от Deviaphan Посмотреть сообщение
Пофиг.)))
Именно по тому что это логический "конец" вашей программы ...

И данные будут представлены в том виде котором они могут быть восприняты,
а не в том котором лучше их хранить (в плане наибольшей точности) - т.е. выход.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.01.2013, 17:52     Насчёт числа знаков после запятой #31
Цитата Сообщение от Avazart Посмотреть сообщение
Именно по тому что это логический "конец" вашей программы ...
Нет. Потому что я не вижу смысла спорить. Ведь наша точка зрения по проблеме ТС совпадает, а спор идёт в оффтопе.
PoMa_HaB
13 / 13 / 3
Регистрация: 09.01.2013
Сообщений: 78
14.01.2013, 00:17  [ТС]     Насчёт числа знаков после запятой #32
Мда.... А всё началось изза простенького вопроса, который вы перевели в глобальную диаспору....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 06:10     Насчёт числа знаков после запятой
Еще ссылки по теме:

Точность в N знаков после запятой числа типа double C++
Как вывести double до 2 знаков после запятой? C++
Максимальное количество знаков после запятой C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.01.2013, 06:10     Насчёт числа знаков после запятой #33
Главное, что для твоей проблемы решение озвучили.)))
Yandex
Объявления
14.01.2013, 06:10     Насчёт числа знаков после запятой
Ответ Создать тему
Опции темы

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