|
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
|
|
Каков принцип округления дробных чисел у компьютера/компилятора?25.07.2018, 23:01. Показов 8787. Ответов 88
Метки нет (Все метки)
Всем привет.
У меня тут такой вопрос для темы: Как именно осуществляется округление дробных чисел в компьютере? Какими правилами он пользуется? Я пишу программу, просто как тренировочную, в целях практики, так как я только начинаю путь программирования,ее цель (программы) это тренинг по математике, различного уровня сложности и головоломки, и вот в этой программе, возникли проблемы с расхождением результатов: результат, который ввожу я, (вычисленный на калькуляторе) отличается от результата, который вычисляет компьютер. При том что используемый калькулятор - стандартный в ОС Windows. Мало того значение в переменной округляется на разных этапах компиляции, что приводит в расхождению результатов и невозможно подобрать правильный. Такое ощущение, что компьютер играет со мной в стаканчики и крутит вертит эти результаты, чтобы запутать. Прогонял через отладчик, и даже просто переписывал результат из переменной хранящей результат, но при сравнении снова выдает ошибку совпадения, результаты разные, компилятор округлил значение на каком то этапе компиляции и уже несовпадение. В общем вопрос очень тонкий, надеюсь есть решения, которые можно осуществить на уровне начальных знаний о С++, или же надо подключать сложные и громоздкие математические библиотеки, с которыми я еще не знаком? Конечно программа не принесет прибыли, и даже может пользы (в плане математики) от нее будет не много, но как практическая работа она очень интересная. P.S. Пытался загрузить проект (правда он не закончен), но не получается пока... буду пытаться еще грузить, может кому интересно будет на него взглянуть.
0
|
|
| 25.07.2018, 23:01 | |
|
Ответы с готовыми решениями:
88
Как избежать округления дробных чисел Как избежать округления дробных чисел Каков принцип работы атрибутов |
|
Комп_Оратор)
|
|
| 27.07.2018, 23:57 | |
|
txtbit, можно конечно и поисследовать... Но, скажите, а вербально - никак? Просто, если оно Вам нужно, действительно, то было бы гуманно (по отношению к тем кого Вы спрашиваете) попытаться объяснить. imho.
0
|
|
|
0 / 0 / 0
Регистрация: 27.11.2017
Сообщений: 22
|
||
| 28.07.2018, 04:05 | ||
|
Все ясно изложено в предыдущем моем посте, возможно я не правильно понял автора темы, чего он хочет добиться. Но уж точно ему не нужны те дебри работы аппаратуры, во всяком случае пока.
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
|
|
| 28.07.2018, 08:03 | |
|
0
|
|
|
Комп_Оратор)
|
|||
| 28.07.2018, 08:58 | |||
|
Не по теме: Это тоже непонятно. Кому ясно? Мне не ясно, иначе бы я не спросил. Что касается юмора, то это не порок, я ведь не делал оценочных суждений о вас. Я сказал о вашей фразе и готов повторить. А вы говорите о моих намерениях и эго. Об этом в - другие разделы, но вкратце - каждый из нас тут по разным причинам. Комбинация наличия свободного времени и эго - не последняя из них. Пропорции разные у всех, да. И всё же. Когда вы говорите об "округлении в процессе расчёта", я хочу понять, что именно вы говорите. Я спрошу конкретнее: -"в процессе" означает, что вы округляете промежуточные результаты? -как вы их определяете (все ли округляеете начисто или выборочно и если выборочно, то как выбираете)? -как производите само округление? -зачем вы это делаете?
0
|
|||
|
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
|
||||||||
| 28.07.2018, 10:38 [ТС] | ||||||||
А теперь конкретно к теме....↓↓↓ Ответ должен быть высчитан либо в уме (если кто то способен делать такие расчеты в уме), либо на бумаге, и потом эти расчеты внести через "cin" в переменную UserResult, что б выполнилось условие if (UserResult == Result). Вот это все что я хочу. Есть способы без вычислений все через число мантисса и экспоненту, и представлений все в двоичном виде, или нет? Если есть, то подскажите какие (вкл. библиотеки stl или тому подобные, придется знакомиться с ними прежде чем узнать до конца что такое класс и объекты класса)))) ), если нет, то так и скажите что таких способов нет, что надо писать данную библиотеку самому или оставить данный проект... Всем еще раз спасибо за дискуссию, ответы в любом случае были интересные, многое что взято на заметку... Добавлено через 7 минут Добавлено через 3 минуты
Добавлено через 5 минут
0
|
||||||||
|
Комп_Оратор)
|
|||
| 28.07.2018, 10:58 | |||
double, но если вы нехотите в это вникнуть, то помочь вам не могу. Написать собственную библиотеку использующую некое макросивольное представления в десятичных разрядах, это тяжелый труд, но главное - совершенно бессмысленный. Пересмотрите мой пост с сылкой на стандарт и посмотрите блог по другой ссылке. Это не то что читается как белетристика, но и тут не могу помочь. Вы вот даже людям, которые могут понять не можете объяснить в словестной форме, а представьте, что вам это нужно объяснить детям в детсаду. Вот и мы вам не сможем. Пока вы не почитаете, то что не хотите.
0
|
|||
|
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
|
||||
| 28.07.2018, 11:17 [ТС] | ||||
|
#define это UserResult == Result
Внимание вопрос: Как это сделать?
0
|
||||
|
Комп_Оратор)
|
|||||
| 28.07.2018, 11:32 | |||||
|
В цифровом мире: Для чисел с плавающей точкой нет алгоритма обеспечивающего равенство. Потому что результат зависит от порядка вычислений в частности. Причём, речь идёт об операциях равного приоритета с точки зрения математики. Это потому, что в прикладной математике всё несколько иначе. Для детей не имеющих представления о плавающей точке нет смысла говорить о иррациональных или, упаси бог, трансцендентных числах. Лучше им заняться целочисленной математикой - арифметикой. Остальное, - по мере наращивания скилов. Там, когда-нибудь им можно будет без труда объяснить, почему нет строгого равенства для чисел с плавающей точкой в цифровом мире, такого которое является однозначно гарантированным результатом.
0
|
|||||
|
-2 / 1 / 0
Регистрация: 18.07.2018
Сообщений: 84
|
||||
| 28.07.2018, 11:58 [ТС] | ||||
|
Добавлено через 4 минуты
Хорошо, мы выяснили, что UserResult == Result не работает и работать не будет в данном случае, я убедился в этом уже неоднократно и поэтому начал эту тему. Теперь, когда мы имеем эти точные данные,
Заранее благодарю за информацию...
0
|
||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 28.07.2018, 12:06 | ||
|
Добавлено через 1 минуту Потом в качестве класса числителя и знаменателя прикрути большие числа.
0
|
||
|
Комп_Оратор)
|
||
| 28.07.2018, 12:29 | ||
|
сравнение чисел с плавающей точкой на равенство с++ хотя C++ как таковой тут не обязателен, но коль скоро мы в этом разделе, то сузить реализации можно. Для удобства. Итак, вы получаете кучу ссылок и сразу попадаете к нам. Вот сюда, например. Проверить на равенство два числа типа double Добавлю от себя, что оптимальный выбор эпсилон, не тривиальная задача, если вы считаете какой-то ряд, например, или крутите дихотомический алгоритм.
0
|
||
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
|
| 28.07.2018, 12:57 | |
|
удалено
0
|
|
| 28.07.2018, 14:55 | ||
|
Не по теме:
0
|
||
| 28.07.2018, 15:00 | |
|
Не по теме: Evg, вы преувеличиваете. Вторая ссылка сверху через браузер, с которого на ресурс не заходил. Другое дело: какой регион выбран (страна).
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
|
||||||||
| 28.07.2018, 15:00 | ||||||||
|
один скажет 3.14, другой 3.1415926, третий вообще приведет сто знаков после запятой, и все это число Пи, но данные не равны между собой ![]() есть погрешность измерения и есть погрешность расчетов в бытность мою студентом я чуть не завалил курсовую расчет импульсного источника питания, там кругом используется корень из двух преподаватель проверил ответ не сходится, ответственно " не зачет" сели вместе стали разбираться, " эта формула правильна?" "правильно", "а это?" "правильно", "методика?" "правильна" а ответ не сходится ![]() оказалось что в расчетах он использовал корень из двух равным 1.41, а я, решивши выпендрится, 1.4142156 в итоге набежала колоссальная ошибка ![]() вот тогда я и понял основной закон метрологии, точность вычислений должна быть равна точности измерений если меряешь диаметр в метрах, не надо длину окружности вычислять с точностью до миллиметров на Си это выглядит так
0
|
||||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 28.07.2018, 15:12 | ||
|
0
|
||
|
Комп_Оратор)
|
|||
| 28.07.2018, 18:54 | |||
|
Не по теме:
![]() Добавлено через 10 минут Это не вызовет у детей интузиазма. Наоборот. Подозрение, что взрослые обманывают, перерастёт в уверенность и с этим потом придётся бороться совершая подвиги откровенного бескорыстия и сокровенной добродетели. А наша школа, в массе своей не готова к таким потрясениям.
0
|
|||
| 28.07.2018, 18:58 | |
|
0
|
|
|
Комп_Оратор)
|
|||
| 28.07.2018, 19:55 | |||
|
это есть в блоге куда я показывал. https://www.cyberforum.ru/blog... g3523.html Внизу есть пункт, который начинается с
0
|
|||
| 28.07.2018, 20:07 | |
|
Не по теме: А... ты про это... Просто фраза "повторение рассчёта .... не всегда воспроизводимо" по моим понятиям означает немного другое. Т.е. тут вопрос неточной формулировки
0
|
|
| 28.07.2018, 20:07 | |
|
Каков принцип работы парсера? Aspnet_regsql: каков принцип работы GZipstream - каков принцип многопоточного сжатия/распаковки? Каков принцип работы клиент-серверного приложения Каков принцип работы самого простого web crawler? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|