Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

До какого числа Double точно хранит целые?   Найти похожие ветки 

 
Eu   (2012-07-25 12:35) [0]

То есть, погрешность хранения менее 0.5?

На примере:

procedure test(iSrc: int64);
var
 iDst: int64;
 d: double;
begin
 d := iSrc ;
 iDst := Round(d);
 if iDst = iSrc then ShowMessage("Test complete");
end;


Какое минимальное положительное число можно передать в процедуру Test, чтобы тест собственно не сработал?

Эх забыл я школьную информатику, может кто оперативно ответ сказать? )) Спор тут вышел )


 
Anatoly Podgoretsky ©   (2012-07-25 12:55) [1]

> Eu  (25.07.2012 12:35:00)  [0]

Точность определяется значением Precision.
В справке есть значения, но  можешь расчитывать на 15 знаков


 
Куку   (2012-07-25 14:00) [2]


> До какого числа Double точно хранит целые?


Согласно календаря Майя, до 23 декабря 2012 года.
Даже если и дольше будет хранить, то это, увы, уже никому не понадобится.


 
Eu   (2012-07-25 14:20) [3]


> Точность определяется значением Precision.

что такое Precision?


> В справке есть значения, но  можешь расчитывать на 15 знаков

не нашел никакого значения...

То есть, при сведении дробной части к нулю, в целой части может точно хранится 15 знаков? Иными словами:

999`999`999`999`999,0   ?


 
Pavia ©   (2012-07-25 14:25) [4]

Between 252=4,503,599,627,370,496 and 253=9,007,199,254,740,992 the representable numbers are exactly the integers. For the next range, from 253 to 254, everything is multiplied by 2, so the representable numbers are the even ones, etc. Conversely, for the previous range from 251 to 252, the spacing is 0.5, etc.

http://en.wikipedia.org/wiki/Double-precision_floating-point_format


 
Inovet ©   (2012-07-25 14:57) [5]

> [3] Eu   (25.07.12 14:20)
> То есть, при сведении дробной части к нулю, в целой части
> может точно хранится 15 знаков?

Ты прочитай про формат чисел с плавающей точкой.


 
Sha ©   (2012-07-25 15:00) [6]

procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: int64;
 d: double;
begin;
 i:=9007199254740980;
 repeat;
   j:=i+1;
   d:=j;
   i:=trunc(d);
   Memo1.Lines.Add(IntToStr(i));
   until i<>j; //9007199254740992 = 2^53
 end;


 
Компромисс ©   (2012-07-25 15:02) [7]


> i:=9007199254740980;


Автора такого кода очевидно уже известен ответ. По-честному надо, инициализируя нулем :)


 
Anatoly Podgoretsky ©   (2012-07-25 15:02) [8]


> не нашел никакого значения...

У тебя неправильная справка, в правильной тема Real types


 
Eu   (2012-07-25 16:33) [9]


> procedure TForm1.Button1Click(Sender: TObject);


спасибо!

Остается доказать, что нету чисел менее 9007199254740980 для которых условие не соблюдается ))   (я про положительные).

Я что-то помню про машинное эпсилон... По идее, чем больше число - тем больше погрешность абсолютная... В общем, уверен, что это правильный ответ...
Но точно также уверен, что это число можно посчитать по формуле )


 
Давайте будем жрать!   (2012-07-25 16:57) [10]


> уверен, что это число можно посчитать по формуле
осспади... заглянув на http://ru.wikipedia.org/wiki/Число_двойной_точности видим, что под мантиссу отведено 52 бита. следовательно, максимальное число, которое там может храниться, = 2^53 - 1. что и подтверждает пример, в котором на 2^53 начинаются расхождения.


 
Sha ©   (2012-07-25 19:25) [11]

чуть точнее так:
1) под мантиссу отведено 52 бита, следовательно макс. число в мантиссе (2^52)-1,
2) с учетом бита в уме макс. представимое число (2^53)-1,
3) число 2^53 будет последним целым в серии без пропусков,
т.к. оканчивается нулевым битом, отбрасывание которого не влияет на результат.


 
Давайте будем жрать!   (2012-07-25 20:31) [12]


> Sha ©   (25.07.12 19:25) [11]
Мда, поправил дурня. Действительно, 2^53-1 — это особенность реализации, а максимальное число в 52-битной мантиссе 2^52-1. Весь день какую-то хрень несу…



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.058 c
15-1332852071
stas
2012-03-27 16:41
2013.03.22
У кого есть Galaxy tab


15-1349987402
Юрий
2012-10-12 00:30
2013.03.22
С днем рождения ! 12 октября 2012 пятница


15-1329634482
Barlo
2012-02-19 10:54
2013.03.22
Работа с bdGrid


2-1346416774
Bolg
2012-08-31 16:39
2013.03.22
На что указывает указатель?


2-1333344537
SvK.droNe
2012-04-02 09:28
2013.03.22
Рациональная интерполяция с помощью непрерывных дробей.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский