|
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 63
|
|
Точность чисел с плавающей точкой/запятой10.05.2025, 02:32. Показов 3866. Ответов 42
Метки нет (Все метки)
Добрый день!
Имеется массив чисел типа double от 1.000 до 10.000. Каждое число задано с точность до 10^-3. Также есть метод, который принимает число и возвращает ближайшее большее к нему число из этого массива. Всё работает хорошо, кроме одного числа - 1.6, которое всегда возвращается, собственно, не как 1.6, а как 1.6000000000000003. Я понимаю, что с числами с плавающей точкой/запятой не всё так просто, как может показаться на первый взгляд, но всё-таки: - почему это так работает? Причём только с этим числом. Все остальные возвращаются такими, какими они заданы в массиве; - возможно ли от этого избавиться без применения округлений, обрезаний и прочих инструментов?
0
|
|
| 10.05.2025, 02:32 | |
|
Ответы с готовыми решениями:
42
|
|
|
|||||||
| 12.05.2025, 11:39 | |||||||
double никогда вот такое условие не выполнится, ну может быть и выполнится, но с вероятностью 0,00001%
decimal...
0
|
|||||||
|
|
|
| 12.05.2025, 11:43 | |
|
0
|
|
|
|
|
| 12.05.2025, 11:49 | |
|
0
|
|
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 12.05.2025, 11:51 | ||
|
уточню ваше утверждение: невозможность обеспечить высокую точность измерений и промежуточных вычислений делает бесполезным брать число пи с высокой точностью (поэтому считаем достаточной точностью). так если вы циркулем измерите диаметр круга, то нет смысла при вычислении в столбик брать пи с точностью 10 знаков после запятой, так как уже при измерениях заложена ошибка. или, альтернативно, можно предположить, что изначально стоит задача посчитать до стольких знаков после запятой.
0
|
||
|
|
||
| 12.05.2025, 11:58 | ||
|
Добавлено через 6 минут golosalex, этот пример не сравнения дробных чисел, а показатель степени влияния каждого последующего знака на конечный результат. Причем здесь только 6 и 10 знаков, а ТСа волнует аж 16-й! Смысл же всего этого таков: не нужно ничего отбрасывать и округлять. Числа должны оставаться такими, какими есть и участвовать в расчетах в неизменном виде. А уже выводить пользователю их значения можно с какой-л. точностью..
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 14.05.2025, 01:03 | |||
|
Но всё та же жоППа, только вид сбоку.
0
|
|||
|
Модератор
|
||
| 14.05.2025, 01:55 | ||
|
1
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 14.05.2025, 02:33 | |
|
1
|
|
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 14.05.2025, 08:07 | ||
|
чет я не силен в бух учете, но никогда не сталкивался с переводами долей копеек, а значит полагаю, что их скорее всего округляют. а если все в копейках считается, то не проще ли как-то все в интах делать? ну или в даблах если на то пошло с округлением в конце. как - то можете обосновать, что погрешность может накопиться достаточной, чтобы обратить на себя внимание. вот в мат расчетах такие проблемы бывают и то вполне обходятся даблами. а тут то нафиг оно? и все равно с децимал подозреваю будет не всегда все гладко и какая-то потеря точности да случается. там же тоже мантиса степень и знак как в дабле? но вполне допускаю что заблуждаюсь, могу изменить мнение под общественным давлением))))
0
|
||
|
|
|
| 14.05.2025, 09:23 | |
|
SmallEvil, golosalex, Тип decimal хранится в памяти как целое число с индексом разряда. Все операции с ним производятся как с целым числом, потому и нет ошибок, которые присущи типам double и float так как невозможно в памяти ПК воспроизвести точно число с плавающей точкой.
0
|
|
|
Модератор
|
||
| 14.05.2025, 11:30 | ||
|
Да потом они по итогу округляются. Но проведение вычислений в научной системе, потом округление в ней и приведение к десятичному виду часто может дать не тот результата, если всё это делать сразу в десятичном формате. А одно из главных требований к финансово-бухгалтерским операциям - это возможно их точного повторения различными методами. Это нужно для проведение сверок и контролей. double может дать разный результат даже при простом суммировании массива значений в зависимости от порядка их добавления в сумму. Добавлено через 2 минуты Простейшее правило арифметики A+B+С=C+B+A в реальности для double значений будет не всегда выполняться.Добавлено через 1 минуту P.S. Добро пожаловать в вычислительную математику! ![]() Она не всегда совпадает со "школьной" математикой.
0
|
||
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
|||||||||
| 14.05.2025, 12:20 | |||||||||
|
попробую уточнить свою позицию:
если вы уверены что есть принципиальная разница в вычислениях, то вот пример ниже
единственное оправдание что я могу придумать - это то что какой-то годовой ввп мира с точностью до цента может не влезть, потому что точность будет примерно 15 знаков. но есть же какой-то условный long... вот потому и подозреваю, что такая явно избыточная точность выглядит странной. (ну или просто у меня мало денег чтобы из в decimal хранить...)
0
|
|||||||||
|
|
||
| 14.05.2025, 12:25 | ||
|
Добавлено через 2 минуты Как в памяти компьютера представлен тип данных decimal?
1
|
||
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 14.05.2025, 12:47 | ||
|
вторую ссылку я находил, но не особо вникая решил, что в формуле 10 - это в двоичной системе)) Добавлено через 2 минуты иногда очень бы хотелось чтобы весь диапазон double покрывался decimal, а тут оказывается проблема более сложная.
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||
| 14.05.2025, 13:53 | |||||||
Нужен такой тип в С++. ![]() А то новичкам совсем туго приходится.
0
|
|||||||
|
Модератор
|
||||||||||||||
| 14.05.2025, 14:06 | ||||||||||||||
|
float и double имеют двоичные мантиссу меньше 1 и экспоненту. Поэтому у них не "десятичная" точка, а "двоичная". decimal же имеет целую мантиссу и десятичную экспоненту. Поэтому у него действительно десятичная точка. Всюду с decimal обращаются по правилам банальной школьной арифметики и всюду получат один и тот же результат. Одно то что не всякое десятичное конечное нецелое число можно представить конечным двоичным числом - накладывает серьёзные ограничения на их использование в финансах. Вот пример:
1
|
||||||||||||||
|
152 / 136 / 29
Регистрация: 02.07.2013
Сообщений: 996
|
||
| 14.05.2025, 14:59 | ||
|
0
|
||
|
|
|
| 14.05.2025, 15:17 | |
|
Один раз попался сайт где можно было увидеть как хранятся числа разных типов в памяти. Дак вот, если ввести double/float и потыркать кнопку обновить, то каждый раз получалось разное число в двоичной системе, а целые и decimal/numeric всегда одинаково выглядели
0
|
|
|
Модератор
|
||
| 14.05.2025, 15:46 | ||
|
Но вроде только целые десятичные. Не помню точно сейчас.
0
|
||
| 14.05.2025, 15:46 | |
|
Хранение чисел с плавающей запятой в памяти
число с плавающей точкой Числа с плавающей точкой Введение данных с плавающей точкой в TextBox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|