ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Sheplyakov <asheplyakov@basealt.ru>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] Минутка математики (Was: Re:  [#238855] [test-only] FAILED (try 4) openblas.git=0.3.9-alt1 R-base.git=4.0.0-alt1)
Date: Fri, 1 May 2020 11:21:36 +0400
Message-ID: <20200501072136.GA10907@alexnuc> (raw)
In-Reply-To: <20200429125616.GA5087@alexnuc>

On Wed, Apr 29, 2020 at 04:56:16PM +0400, Alexey Sheplyakov wrote:

> > $(R_EXE) на ppc64le зависает не в специфическом месте при сборке, а
> > вообще всегда при запуске. Похоже, это происходит вот в этом цикле:
> > 
> > http://git.altlinux.org/people/kirill/packages/R-base.git?p=R-base.git;a=blob;f=src/main/machar.c;h=8db54f1350fe85b0204c7affb4ef79180fc3e5ad;hb=edfd434c0f879f16a9a8f124648df4b4eb23a7e3#l156
> > 
> > src/main/machar.c
> > 
> > 155         for(;;) {
> > 156                 temp = one - a;
> > 157                 if (temp - one != zero)
> > 158                         break;
> > 159                 a = a * beta;
> > 160                 *negep = *negep - 1;
> > 161         }
> > 
> > Что бы это могло быть?
> 
> Исходя из базы (beta) и длины мантиссы (it) пытаются вычислить минимальное
> число eps, такое, что 1.0 - eps != 1.0 (точнее, его логарифм по основанию
> beta). Когда этот код писали, еще не было стандарта IEEE 754, <float.h>,
> макросов {FLT,DBL,LDBL}_EPS. Приходилось вот так изворачиваться.
> 
> Но на ppc64 (и некоторых SPARCv9) вместо нормального (IEEE 754) long doulbe
> почему-то используется double double, т.е. представление числа в виде пары
> (суммы) двух double. При таком способе большИе числа можно представить
> точнее, чем double. Например, число 2^53 1/2 можно точно (без округления)
> представить в виде cуммы "большого" числа 2^53 и "маленького" 1/2. А в double
> такое число не влезет, 53 бит не хватит, придется округлять. Причем диапазон
> "маленького" числа гораздо шире, чем у целого той же разрядности (53 бита),
> ведь есть 11-битный показатель, и им можно масштабировать! Но не выйдет
> представить с большей (чем double) точностью положительное число, меньшее
> 2^{-1021}, по той же причине -- показатель все равно 11 бит. Таким образом,
> у double double длина мантиссы не постоянна и зависит от показателя.
> А функция MACH_NAME исходит из обратного, т.е. из (в общем-то разумного)
> предположения, что длина мантисы фиксирована.
> 
> 
> А теперь вернемся к 1 + eps != 1.0. С помощью "честного" числа с плавающей
> точкой с длиной мантисы 106 бит (что соответствует паре double) можно
> представить b1.0000{100 нулей}1, или 1 + 1/2^105. А с помощью double double
> можно представить даже b1.0{1019 нулей}1 в виде пары (1, 1/2^(-1021)).

Имеется в виду пара (1, 1/2^1021), конечно же. Прошу прощения за опечатку.

> Потому попытка искать с 
> 
> 149         *negep = *it + 3;
> 
> или -109, и в дальнейшем *увеличивать* показатель
> 
> 155         for(;;) {
> 156                 temp = one - a;
> 157                 if (temp - one != zero)
> 158                         break;
> 159                 a = a * beta;
> 160                 *negep = *negep - 1;
> 161         }
> 
> заведомо обречена. Поэтому этот цикл никогда не закончится (ну, может
> когда int со знаком переполнится).
> 
> К счастью, "подарок" от IBM (double double) легко отключть с помощью флагов
> компиляции
> 
> -mabi=ieeelongdouble -mlong-double-128
> 


      parent reply	other threads:[~2020-05-01  7:21 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-26 13:19 ` [devel] [#238855] [test-only] FAILED (try 4) openblas.git=0.3.9-alt1 R-base.git=4.0.0-alt1 Kirill Maslinsky
2020-04-26 14:20   ` Dmitry V. Levin
2020-04-26 14:35     ` Michael Shigorin
2020-04-26 15:33       ` [devel] про texlive Dmitry V. Levin
2020-04-26 15:54         ` Andrey Savchenko
2020-04-26 17:36           ` Dmitry V. Levin
2020-04-27  6:45             ` Andrey Savchenko
2020-04-27  8:11               ` [devel] про texlive и installcheck тысяч подзаданий Michael Shigorin
2020-04-27  8:30                 ` mcpain
2020-04-27  8:40                   ` Alexey V. Vissarionov
2020-04-27  8:58                     ` [devel] про texlive и installcheck тысяч (под)пакетов Michael Shigorin
2020-04-27  8:40                   ` [devel] про texlive и installcheck тысяч подзаданий Andrey Savchenko
2020-04-27  9:01                     ` Michael Shigorin
2020-04-27 10:09                       ` Andrey Savchenko
2020-04-27  8:41                   ` Michael Shigorin
2020-04-26 15:11     ` [devel] [#238855] [test-only] FAILED (try 4) openblas.git=0.3.9-alt1 R-base.git=4.0.0-alt1 Kirill Maslinsky
2020-04-27  8:48     ` Kirill Maslinsky
2020-04-27 10:57       ` Anton Farygin
2020-04-27 11:24         ` Andrey Savchenko
2020-04-27 18:28         ` Michael Shigorin
2020-04-27 12:00       ` Dmitry V. Levin
2020-04-27 18:40         ` Dmitry V. Levin
2020-04-28  9:46           ` Kirill Maslinsky
2020-04-28 19:53           ` Kirill Maslinsky
2020-04-28 22:39             ` Vladislav Zavjalov
2020-04-29 12:56             ` [devel] Минутка математики (Was: Re: [#238855] [test-only] FAILED (try 4) openblas.git=0.3.9-alt1 R-base.git=4.0.0-alt1) Alexey Sheplyakov
2020-04-29 15:09               ` Kirill Maslinsky
2020-05-01  7:44                 ` Alexey Sheplyakov
2020-05-01  7:21               ` Alexey Sheplyakov [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200501072136.GA10907@alexnuc \
    --to=asheplyakov@basealt.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git