2014 dxdy logo

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

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





Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Помогите разобраться с точностью
Сообщение28.02.2017, 16:47 


14/06/15
130
В книге [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$\cdot$10^0 or by 170$\cdot$10^{-1},
since both 17 and 170 are less than $\beta^p$ = 999. The set of
these 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$\cdot$2^{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
390
Ваши вопросы не понятны. С другой стороны английский текст я понимаю без затруднений. Не могли бы сформулировать свои вопросы более развёрнуто?

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


16/07/14
1265
Москва
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
130
mihaild в сообщении #1196096 писал(а):
sashatgu в сообщении #1196030 писал(а):
Почему p = 3?
sashatgu в сообщении #1196030 писал(а):
Почему p = 4?
Потому что это примеры - можно рассматривать те значения $p$, которые хотим.
Те $p$ в данных примерах взяты от барабана?

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

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

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


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

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


14/06/15
130
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
1265
Москва
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
130
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
390
Число с плавающей точкой - это целое число умноженное на некий множитель. Так устроен мир.

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


16/07/14
1265
Москва
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
130
slavav в сообщении #1196142 писал(а):
Число с плавающей точкой - это целое число умноженное на некий множитель. Так устроен мир.


:lol: :lol: :lol:

-- 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
1265
Москва
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
130
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 значения (на машинном уровне или уровне двоич.) и почему она не дает правильный ответ?

Те, что происходит на глубоком уровне (шаг за шагом)?

Пример:
Используется синтаксис Java
public 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
1265
Москва
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
2811
Россия, Москва
Попробую ответить на 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 выводит лишнюю цифру после запятой и там появляется единичка - не знаю.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3  След.

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



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group