Как программно сделать горизонтальную линию в Qt

Десятичные числа могут быть представлены точно, если у вас достаточно места - просто не с помощью плавающих двоичных номеров точек. Если вы используете плавающий тип десятичный тип (например, System.Decimal в .NET), то множество значений, которые не могут быть представлены точно в двоичной плавающей запятой, могут быть точно представлены.

Давайте посмотрим на это по-другому - в базе 10, с которой вам, вероятно, будет комфортно, вы не можете точно выразить 1/3. Это 0.3333333 ... (повторяющийся). Причина, по которой вы не можете представить 0,1 в качестве двоичного числа с плавающей запятой, по той же причине. Вы можете точно представлять 3, 9 и 27, но не 1/3, 1/9 или 1/27.

Проблема в том, что 3 - простое число, которое не является фактором 10 . Это не проблема, когда вы хотите умножить число на 3: вы всегда можете умножить на целое число, не сталкиваясь с проблемами. Но когда вы разделите на число, которое является простым и не является фактором вашей базы, вы можете столкнуться с проблемой (и будет делать это, если вы попытаетесь разделить 1 по этому числу).

Хотя 0,1 обычно используется в качестве простейшего примера точного десятичного числа, которое не может быть представлено точно в двоичной плавающей точке, возможно, 0.2 является более простым примером, так как это 1/5 - и 5 - простое число, которое вызывает проблемы между десятичными и двоичными.


Боковое примечание для решения проблемы конечных представлений:

Некоторые типы плавающих десятичных точек имеют фиксированный размер например System.Decimal, другие, такие как java.math.BigDecimal, «сколь угодно велики», но в какой-то момент они достигнут предела, будь то системная память или теоретический максимальный размер массива. Однако это совершенно отдельный момент для основного ответа. Даже если у вас было действительно произвольно большое количество бит, с которыми вы играли, вы все равно не могли бы представлять десятичные числа 0,1 точно в виде плавающего двоичного представления. Сравните это с другим способом: заданное произвольное число десятичных цифр, вы можете точно представлять любое число, которое точно представляется как плавающая двоичная точка.

23
задан eyllanesc 19 November 2017 в 00:06
поделиться