# Научный форум dxdy

Математика, Физика, Computer Science, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки

 На страницу 1, 2, 3  След.
 Печатать страницу | Печатать всю тему Пред. тема | След. тема

 Помогите разобраться с точностью28.02.2017, 16:47

14/06/15
103
 Последний раз редактировалось GAA 28.02.2017, 23:51, всего редактировалось 1 раз. В книге [Handbook of Floating-Point Arithmetic][1] , на стр. 13-15, можно прочесть: A floating-point format is (partially) characterized by four integers:a radix (or base) $\beta$>=2; a precision p>=2 (roughly speaking, p is the number of “significant digits” of the representation); two extremal exponents $e_{min}$ and $e_{max}$ such that $e_{min} < e_{max}$.In all practical cases, $e_{min} < 0 < e_{max}$.A finite floating-point number in such a format is a number for which there exists at least one representation (M, e) such that: $x = M \beta^{e-p+1}$ where M is an integer of absolute value less than or equal to $\beta^p-1$. It is called the integral significand of the representation of x; e is an integer such that $e_{min}< e < e_{max}$, called the exponent of the representation of x.The representation (M, e) of a floating-point number is not necessarily unique. For instance, with $\beta$ = 10 and p = 3 (Почему p = 3?), the number 17 can be represented either by $17\cdot10^0$ or by $170\cdot10^{-1}$,since both 17 and 170 are less than $\beta^p$ = 999. The set ofthese equivalent representations is called a cohort.Consider the following “toy system.” We assume radix $\beta$ = 2, precision p = 4 (Почему p = 4?), $e_{min}$ = −7, and $e_{max}$ = +8. The number $416_{10}$ = $110100000_2$ is a floating-point number. It has one representation only, with integral significand $13_{10}$ and exponent $8_{10}$, since $416 = 13\cdot2^{8-4+1}$When x is a nonzero arbitrary real number (i.e., x is not necessarily representable in a given floating-point format), we will denote infinitely precise significand of x (in radix $\beta$ ) the number $\frac{x}{\beta^{\left \lfloor log_{\beta}|x| \right \rfloor }}$where $\beta^{\left \lfloor log_{\beta}|x| \right \rfloor }$ is the largest integer power of $\beta$ smaller than |x| (Что это такое?).[1]: http://www.springer.com/us/book/9780817647049

 Re: Помогите разобраться с точностью28.02.2017, 20:32

26/05/14
379
 Ваши вопросы не понятны. С другой стороны английский текст я понимаю без затруднений. Не могли бы сформулировать свои вопросы более развёрнуто?

 Re: Помогите разобраться с точностью28.02.2017, 20:37
 Заслуженный участник

16/07/14
1134
Москва
 Последний раз редактировалось mihaild 28.02.2017, 20:37, всего редактировалось 1 раз. sashatgu в сообщении #1196030 писал(а):Почему p = 3?sashatgu в сообщении #1196030 писал(а):Почему p = 4?Потому что это примеры - можно рассматривать те значения $p$, которые хотим.sashatgu в сообщении #1196030 писал(а):Что это такое?Что такое что? $|x|$? Модуль $x$ (т.е. $x$, если $x > 0$ и $-x$ иначе).

 Re: Помогите разобраться с точностью28.02.2017, 22:50

14/06/15
103
mihaild в сообщении #1196096 писал(а):
sashatgu в сообщении #1196030 писал(а):
Почему p = 3?
sashatgu в сообщении #1196030 писал(а):
Почему p = 4?
Потому что это примеры - можно рассматривать те значения $p$, которые хотим.
Те $p$ в данных примерах взяты от барабана?

Ну а какой тогда истинный смысл в $p$, ведь как я понимаю $p$ означает какое то количество знаков после запятой в числах с плавающей запятой.

А что $p$ означает просто в целых числах (ведь в примерах афишируются целые числа)?

 Re: Помогите разобраться с точностью28.02.2017, 22:57

26/05/14
379
 $p$ - число цифр мантиссы, которые вам позволено хранить. Оно конечно целое. Или я не понял вопрос?

 Re: Помогите разобраться с точностью28.02.2017, 22:57

14/06/15
103
mihaild в сообщении #1196096 писал(а):
sashatgu в сообщении #1196030 писал(а):
Что это такое?
Что такое что? $|x|$? Модуль $x$ (т.е. $x$, если $x > 0$ и $-x$ иначе).
Что такое модуль - я знаю.

Я имею ввиду что значит:

When x is a nonzero arbitrary real number (i.e., x is not necessarily
representable in a given floating-point format), we will denote
infinitely precise significand of x (in radix $\beta$ ) the number $\frac{x}{\beta^{\left \lfloor log_{\beta}|x| \right \rfloor }}$ where $\beta^{\left \lfloor log_{\beta}|x| \right \rfloor }$ is the largest integer power of $\beta$ smaller than |x| .
Что значит это дробь и особенно ее знаменатель, который показан ниже.
Ведь эта дробь не будет равна 1.
И что это за непонятные скобки - которые ведут к округлению - как я понял (но не до конца).

-- 28.02.2017, 22:59 --

slavav в сообщении #1196135 писал(а):
$p$ - число цифр мантиссы, которые вам позволено хранить. Оно конечно целое. Или я не понял вопрос?
Ведь там в примерах фигурируют целые числа, а какой точности мы тогда говорим. Те эти $p$ взяты просто так из головы?

 Re: Помогите разобраться с точностью28.02.2017, 23:01
 Заслуженный участник

16/07/14
1134
Москва
 Последний раз редактировалось mihaild 28.02.2017, 23:06, всего редактировалось 1 раз. sashatgu в сообщении #1196132 писал(а):Ну а какой тогда истинный смысл в $p$, ведь как я понимаю $p$ означает какое то количество знаков после запятой в числах с плавающей запятой.Есть много разных форматов чисел с плавающей запятой - а именно, каждая четверка $(\beta, p, e_{min}, e_{max})$ задает формат.Можно взять конкретные значения этих чисел и рассмотреть конкретный формат, далее в нем можно записывать конкретные числа. Можно взять какие-то другие значения параметров - и тогда то же самое число будет записываться иначе (а возможно его вообще нельзя будет записать).-- 28.02.2017, 23:06 --sashatgu в сообщении #1196136 писал(а):Ведь эта дробь не будет равна 1.Любой $x \neq 0$ единственным способом представляется в виде $sign(x) \cdot y \cdot \beta^n$, где $y \in [1; \beta)$, а $n$ -целое. И как раз $y = \frac{x}{\beta^{\left \lfloor \log_{\beta}|x| \right \rfloor }}$.А скобки - это округление вниз. Но там как раз выписано определение сразу всего выраженияsashatgu в сообщении #1196136 писал(а):where $\beta^{\left \lfloor \log_{\beta}|x| \right \rfloor }$ is the largest integer power of $\beta$ smaller than $|x|$

 Re: Помогите разобраться с точностью28.02.2017, 23:17

14/06/15
103
mihaild в сообщении #1196137 писал(а):
sashatgu в сообщении #1196132 писал(а):
Ну а какой тогда истинный смысл в $p$, ведь как я понимаю $p$ означает какое то количество знаков после запятой в числах с плавающей запятой.
Есть много разных форматов чисел с плавающей запятой - а именно, каждая четверка $(\beta, p, e_{min}, e_{max})$ задает формат.

Можно взять конкретные значения этих чисел и рассмотреть конкретный формат, далее в нем можно записывать конкретные числа. Можно взять какие-то другие значения параметров - и тогда то же самое число будет записываться иначе (а возможно его вообще нельзя будет записать).
Те автор взял значения $p$ = 3 и $p$ = 4 в своих примерах просто рандомно, но что значит $p$ в примерах автора и что $p$ значит вообще?

 Re: Помогите разобраться с точностью28.02.2017, 23:24

26/05/14
379
 Последний раз редактировалось slavav 28.02.2017, 23:34, всего редактировалось 1 раз. Число с плавающей точкой - это целое число умноженное на некий множитель. Так устроен мир.

 Re: Помогите разобраться с точностью28.02.2017, 23:27
 Заслуженный участник

16/07/14
1134
Москва
 sashatgu в сообщении #1196140 писал(а):но что значит $p$ в примерах автора и что $p$ значит вообще?В примерах оно значит то же, что и вообще:-) - количество цифр, которые мы храним.В виде чисел с плавающей запятой можно приближенно хранить не только дробные, но и целые числа. Например, если $p = 2, \beta = 10$, то мы не сможем записать число $1234$ точно - но можем записать его приближенно как $12 \cdot 10^{3 - 2 + 1}$. Аналогично, число $0.1234$ мы записать точно не можем - но можем записать $12 \cdot 10^{-1 -2 + 1}$.

 Re: Помогите разобраться с точностью01.03.2017, 00:01

14/06/15
103
 Последний раз редактировалось sashatgu 01.03.2017, 00:05, всего редактировалось 1 раз. slavav в сообщении #1196142 писал(а):Число с плавающей точкой - это целое число умноженное на некий множитель. Так устроен мир. -- 01.03.2017, 00:05 --mihaild в сообщении #1196143 писал(а):sashatgu в сообщении #1196140 писал(а):но что значит $p$ в примерах автора и что $p$ значит вообще?В примерах оно значит то же, что и вообще:-) - количество цифр, которые мы храним.В виде чисел с плавающей запятой можно приближенно хранить не только дробные, но и целые числа. Например, если $p = 2, \beta = 10$, то мы не сможем записать число $1234$ точно - но можем записать его приближенно как $12 \cdot 10^{3 - 2 + 1}$. Аналогично, число $0.1234$ мы записать точно не можем - но можем записать $12 \cdot 10^{-1 -2 + 1}$.Понятно, те в вашем примере e = 3 и e = -1, но по поводу дроби которая внизу ничего не понятно - для чего она нужна?Что значит тип округления который используется в ее знаменателе?Вы понимаете что - нибудь в бинарной арифметике (я ей щас занимаюсь)?

 Re: Помогите разобраться с точностью01.03.2017, 00:28
 Заслуженный участник

16/07/14
1134
Москва
 sashatgu в сообщении #1196144 писал(а):для чего она нужна?mihaild в сообщении #1196137 писал(а):Любой $x \neq 0$ единственным способом представляется в виде $sign(x) \cdot y \cdot \beta^n$, где $y \in [1; \beta)$, а $n$ -целое. И как раз $y = \frac{x}{\beta^{\left \lfloor \log_{\beta}|x| \right \rfloor }}$.sashatgu в сообщении #1196144 писал(а):Что значит тип округления который используется в ее знаменателе?mihaild в сообщении #1196137 писал(а):А скобки - это округление внизИз mihaild в сообщении #1196137 писал(а):largest integer power of $\beta$ smaller than $|x|$ легко понять, что $\left \lfloor x \right \rfloor$ - это максимальное целое число, не превосходящее $x$.Что такое "бинарная арифметика"? Если вы под ней подразумеваете двоичную систему счисления - то не очень понятно, в чем там можно "разбираться".

 Re: Помогите разобраться с точностью01.03.2017, 00:47

14/06/15
103
 Последний раз редактировалось sashatgu 01.03.2017, 01:17, всего редактировалось 1 раз. mihaild в сообщении #1196148 писал(а):sashatgu в сообщении #1196144 писал(а):для чего она нужна?mihaild в сообщении #1196137 писал(а):Любой $x \neq 0$ единственным способом представляется в виде $sign(x) \cdot y \cdot \beta^n$, где $y \in [1; \beta)$, а $n$ -целое. И как раз $y = \frac{x}{\beta^{\left \lfloor \log_{\beta}|x| \right \rfloor }}$.sashatgu в сообщении #1196144 писал(а):Что значит тип округления который используется в ее знаменателе?mihaild в сообщении #1196137 писал(а):А скобки - это округление внизИз mihaild в сообщении #1196137 писал(а):largest integer power of $\beta$ smaller than $|x|$ легко понять, что $\left \lfloor x \right \rfloor$ - это максимальное целое число, не превосходящее $x$.Что такое "бинарная арифметика"? Если вы под ней подразумеваете двоичную систему счисления - то не очень понятно, в чем там можно "разбираться".Что в конечном итоге нам даст эта дробь?Что значит "infinitely precise significand of x" и почему ее обозначают так: $\frac{x}{\beta^{\left \lfloor log_{\beta}|x| \right \rfloor }}$ $\beta^{\left \lfloor log_{\beta}|x| \right \rfloor }$ is the largest integer power of $\beta$ less x - тут как я понял ошибка - ведь largest integer power of $\beta$ less x - это ${\left \lfloor log_{\beta}|x| \right \rfloor }$По поводу двоичной:Я хочу понять: как Java складывает 2 double значения (на машинном уровне или уровне двоич.) и почему она не дает правильный ответ?Те, что происходит на глубоком уровне (шаг за шагом)?Пример:код: [ скачать ] [ спрятать ]код: [ скачать ] [ показать ]Используется синтаксис Javapublic class GalToLitTable {       public static void main(String[] args) {           System.out.println(3.7854 + 3.7854);         System.out.println(7.5708 + 3.7854);       }   }After run: 7.5708 11.356200000000001 НО должно быть: 7.5708 11.3562 Я хочу понять (шаг за шагом):1. Как Java преобраз. эти значения в двоич?2. Какое представление этого двоичн ( 80 или 64 бит длины)?3. Как Java округл. этот двоич. (7.5708 and 3.7854 not exact convert to binary, how java rounding this binary (last bit) or java cuts this binary after 64 bit without rounding)?4. Как Java суммир. два бинарных значения?5. Как Java округл. эту двоич. сумму?6. Как Java преобразов. двоич. сумму в десятичную сумму?Вот как я сам ответил на первые 3 вопроса:7.5708 = 0 10000000001 1110010010000111111111001011100100100011101000101010 (Inexact, 1+11+52 bit = 64 bit) 3.7854 = 0 10000000000 1110010010000111111111001011100100100011101000101010 (Inexact, 1+11+52 bit = 64 bit) Java has Round-Half-Even (Banker's Rounding), when convert decimal to binary.Я прав?

 Re: Помогите разобраться с точностью01.03.2017, 02:04
 Заслуженный участник

16/07/14
1134
Москва
 sashatgu в сообщении #1196151 писал(а):Что в конечном итоге нам даст эта дробь?Единственное представление числа в виде мантиссы и экспоненты для случая неограниченной точности - иначе у нас есть неоднозначность $123 \cdot 10^0 = 12.3 \cdot 10^1 = 1.23 \cdot 10^2 = 0.123 \cdot 10^3$.sashatgu в сообщении #1196151 писал(а):Что значит "infinitely precise significand of x"Вам перевод или что? Определение тут уже приведено.sashatgu в сообщении #1196151 писал(а):и почему ее обозначают так: $\frac{x}{\beta^{\left \lfloor log_{\beta}|x| \right \rfloor }}$Это не обозначение, это определение.sashatgu в сообщении #1196151 писал(а):тут как я понял ошибка - ведь largest integer power of $\beta$ less x - это ${\left \lfloor log_{\beta}|x| \right \rfloor }$Нет, ${\left \lfloor log_{\beta}|x| \right \rfloor }$ в общем случае вообще не является целой степенью $\beta$.1-3) это надо смотреть спецификацию java (парсинг десятичной записи можно делать по-разному)Плюсы конвертируют в ту же битовую запись, что указана у вас, так что, видимо, вы нашли ее правильно - и приведенные вами значения являются результатом округления, а не отбрасывания. В том, что получаются именно округленные значения, легко убедиться, выведя их с достаточно большой точностью.

 Re: Помогите разобраться с точностью01.03.2017, 03:54

20/08/14
2550
Россия, Москва
 Попробую ответить на 4-5 пункты.Для того чтобы сложить два числа с плавающей точкой процессор (а не Java) сдвигает одно из них (у которого показатель степени меньше) вправо с увеличением показателя степени на 1 до сравнивания показателей степени, получатся числа (в скобках указываю подразумеваемые биты мантиссы, подчёркивание отделяет 52 бита мантиссы):7.5708 = 0 10000000001 (1).111001001000011111111100101110010010001110100010101 (Inexact, 1+11+52 bit = 64 bit)3.7854 = 0 10000000001 (0).111100100100001111111110010111001001000111010001010_1 (Inexact, 1+11+52 bit = 64 bit)Теперь уже можно их складывать (мантиссы), сумма будет равна:11.3562 = 0 10000000001 (10).110101101100101111111011000101011011010101110011111_1Возникло переполнение мантиссы, для нормализации числа мантисса сдвигается вправо с увеличением показателя степени:11.3562 = 0 10000000010 (01).011010110110010111111101100010101101101010111001111_11Теперь нужно округлить число до представимого мантиссой, т.к. отбрасываемые биты = 11, то к младшему биту мантиссы добавляется 1, а все биты правее отбрасываются:11.3562 = 0 10000000010 (01).011010110110010111111101100010101101101010111010000Это число соответствует числу 11.35620000000000118234311230480670928955078125, но точные из них лишь выделенные жирным цифры. Остальные не равны нулю из-за нехватки 52-х битов мантиссы для более точного представления чисел.Как перевести число из двоичной формы в десятичную Вам дожно быть уже понятно, раз смогли перевести из десятичной в двоичную.Почему Java выводит лишнюю цифру после запятой и там появляется единичка - не знаю.

 Показать сообщения за: Все сообщения1 день7 дней2 недели1 месяц3 месяца6 месяцев1 год Поле сортировки АвторВремя размещенияЗаголовок по возрастаниюпо убыванию
 Страница 1 из 3 [ Сообщений: 38 ] На страницу 1, 2, 3  След.

Модераторы: Toucan, maxal, Karan, PAV, Супермодераторы

#### Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей

 Вы не можете начинать темыВы не можете отвечать на сообщенияВы не можете редактировать свои сообщенияВы не можете удалять свои сообщенияВы не можете добавлять вложения

 Найти: