Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Double inc За один раз / 25 сообщений из 58, страница 1 из 3
21.06.2017, 18:18:02
    #39475698
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Этот код выдаёт 7525000041,32991 или же 7.52500004132991E+0009

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  f := 10; // Double 
  for i := 0 to 50000000 - 1 do
  begin
    f := f + 10.1;
    f := f + 20.1;
    f := f + 30.1;
    f := f + 40.1;
    f := f + 50.1;
  end;



А этот выдаёт 7525000010 или же 7.52500001000000E+0009
Код: pascal
1.
2.
3.
4.
5.
  f := 10; // Double 
  for i := 0 to 50000000 - 1 do
  begin
    f := f + 150.5;
  end;



Какие нужны хитрости, что бы получить результаты как в первом варианте ?
...
Рейтинг: 0 / 0
21.06.2017, 18:31:47
    #39475713
BlackEric
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Няшик,

Вообще-то правильный именно второй вариант. Здесь проблема в точности работы с вещественными числами.
...
Рейтинг: 0 / 0
21.06.2017, 18:34:24
    #39475719
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Няшик...
Какие нужны хитрости, что бы получить результаты как в первом варианте ?
Разобраться в том, как Double представляется в двоичном коде.
...
Рейтинг: 0 / 0
21.06.2017, 18:49:29
    #39475736
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
НяшикЭтот код выдаёт 7525000041,32991 или же 7.52500004132991E+0009

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  f := 10; // Double 
  for i := 0 to 50000000 - 1 do
  begin
    f := f + 10.1;
    f := f + 20.1;
    f := f + 30.1;
    f := f + 40.1;
    f := f + 50.1;
  end;



А этот выдаёт 7525000010 или же 7.52500001000000E+0009
Код: pascal
1.
2.
3.
4.
5.
  f := 10; // Double 
  for i := 0 to 50000000 - 1 do
  begin
    f := f + 150.5;
  end;



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

Точно представить число 0.1 (1/10) в двоичной системе счисления невозможно. Это то же самое, если попытаться точно представить число 1/3 (она третья) в десятичной СС.

Число 10.1 в Double хранится как
1010.0001100110011001100110011001100110011001100110011
- видишь, "бесконечный" период (0011) нарисовался?

Если код обратно вернуть в 10 СС, получишь не 10.1, а 10.1000003814697265625. Лишние 3.814697265625E-7.

А вот десятичное значение 150.5 - вполне себе укладывается в двоичном коде, ибо 0.5 - степень двойки (-1).
Получается в 2-м (Double) 01000011000101101000000000000000. Преобразование обратно в 10сс вернет снова 150.5.

~~~~~~~~~~~~~~~~~

В общем, задача нерешаемая.
...
Рейтинг: 0 / 0
21.06.2017, 18:52:07
    #39475739
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
ЖышыА вот десятичное значение 150.5 - вполне себе укладывается в двоичном коде, ибо 0.5 - степень двойки (-1).
Получается в 2-м (Double) 01000011000101101000000000000000. Преобразование обратно в 10сс вернет снова 150.5.

:d на результатах правда не видно..

Верный результат

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  for i := 0 to 50000000 - 1 do
  begin
    f := f + 150;
    f := f + 0.1;
    f := f + 0.1;
    f := f + 0.1;
    f := f + 0.1;
    f := f + 0.1;
  end;



Без дроби
Код: pascal
1.
2.
3.
4.
5.
  for i := 0 to 50000000 - 1 do
  begin
    f := f + 150;
    f := f + 0.5;
  end;




Я уже тестировал
...
Рейтинг: 0 / 0
21.06.2017, 18:54:59
    #39475741
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Няшик...
Я уже тестировал

"Блажени чистии сердцем, яко тии Бога узрят." - (с).
...
Рейтинг: 0 / 0
21.06.2017, 18:59:26
    #39475745
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
ЖышыНяшик...
Я уже тестировал

"Блажени чистии сердцем, яко тии Бога узрят." - (с).

И к чему это интересно? Нет, конечно хорошо что вы читаете - ползаете и ищите цитатками дабы показать какой вы умный. Но это не относиться к теме.
...
Рейтинг: 0 / 0
21.06.2017, 19:11:04
    #39475751
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
НяшикЖышыпропущено...


"Блажени чистии сердцем, яко тии Бога узрят." - (с).

И к чему это интересно? Нет, конечно хорошо что вы читаете - ползаете и ищите цитатками дабы показать какой вы умный. Но это не относиться к теме.

Я вот тебя молоком практически из собственной натруженной груди кормлю, а ты кусаешься:
...
Рейтинг: 0 / 0
21.06.2017, 19:13:20
    #39475752
Bred eFeM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Няшик, Какие нужны хитрости,
На, балуйся:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var
 r: Double;
 f: Currency;
 i: Integer;
begin
  f := 10; // Double ?
  for i := 0 to 50000000 - 1 do
  begin
    f := f + 10.1;
    f := f + 20.1;
    f := f + 30.1;
    f := f + 40.1;
    f := f + 50.1;
  end;
  r := f;
end;
...
Рейтинг: 0 / 0
21.06.2017, 19:18:37
    #39475753
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Bred eFeM,

Да это я для интерпретатора хочу сделать некую оптимизацию, дабы ускорить процесс работы




К слову, даже без оптимизации, он медленнее modejs на 1.4 %




Вот думал, как бы грамотно числа сложить - что бы получать верный результат. И за помощью сюда обратился
...
Рейтинг: 0 / 0
21.06.2017, 19:33:58
    #39475757
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
"...интерпретатор".
Считает либо быстро, либо правильно? :)
...
Рейтинг: 0 / 0
21.06.2017, 19:39:09
    #39475759
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
чччД"...интерпретатор".
Считает либо быстро, либо правильно? :)

Ибо быстро, и правильно!) NodeJs как то же делает оптимизации такие... Иначе бы она не была быстрее на 1.4
...
Рейтинг: 0 / 0
21.06.2017, 20:13:29
    #39475767
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
НяшикКакие нужны хитрости, что бы получить результаты как в первом варианте ?Вместо double использовать currency.
...
Рейтинг: 0 / 0
21.06.2017, 20:36:52
    #39475776
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
rgreatНяшикКакие нужны хитрости, что бы получить результаты как в первом варианте ?Вместо double использовать currency.

Да всt они не отдают плавающую точку
...
Рейтинг: 0 / 0
21.06.2017, 20:48:13
    #39475779
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Няшик..они не отдают плавающую точку
...
Рейтинг: 0 / 0
21.06.2017, 21:05:04
    #39475784
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
ЖышыНяшик..они не отдают плавающую точку


Разница между 150.0 (1125515264) и 150.5 (1125548032) очевидно есть. В представлении long
...
Рейтинг: 0 / 0
21.06.2017, 21:07:54
    #39475785
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
НяшикДа всt они не отдают плавающую точкуПотому что она там фиксированная. :D

Ну а если надо c даблами можешь приделать принудительное округление до N-го знака после запятой, после каждой операции.
...
Рейтинг: 0 / 0
21.06.2017, 21:20:49
    #39475789
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Няшик,

не делай интерпретатор, ну пожалуйста.
...
Рейтинг: 0 / 0
21.06.2017, 21:23:40
    #39475790
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
чччДНяшик,

не делай интерпретатор, ну пожалуйста.


Хороший стёб =) Он уже работает, и очень быстро. Хотя на тех же сях люди лучше не могут написать. Аналог тот же php7.1 ... Пыжиться а высратся не могут (не в обиду кому либо)
...
Рейтинг: 0 / 0
21.06.2017, 21:30:36
    #39475793
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Ты не понимаешь, как Double в памяти представлен. У тебя интерпретация без чисел с плавающей точкой?
...
Рейтинг: 0 / 0
21.06.2017, 21:35:46
    #39475798
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
чччДТы не понимаешь, как Double в памяти представлен. У тебя интерпретация без чисел с плавающей точкой?

Я не понимаю, почему если сделать +0.5 это не отработает так же, если сделать 5 раз по + 0.1 ... С этим соглашусь, потому что не читал спецификации.

Но, в остальном мой язык проходит все математические тесты из PHP и даже на ура.

Бред силой кабылы будет сейчас всё выкинуть, так как это уже годный интерпретатор, в отличии от php и lua ... Не говоря об остальных подобных (js хорош.)
...
Рейтинг: 0 / 0
21.06.2017, 22:04:24
    #39475806
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Короче, RoundTo - твой выбор.
...
Рейтинг: 0 / 0
21.06.2017, 23:46:03
    #39475827
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Говорят, что давным-давно решили сравнить качество компиляторов фортрана на тяжелой (тогда) расчетной задаче. Все компиляторы, кроме одного, компилировали программу минут за 10 (ориентировочно), после чего расчет шел порядка полутора часов. А один компилятор компилировал несколько часов, зато ответ выдал мгновенно. Тестирующие прифигели, полезли смотреть исполняемый модуль. Оказалось, что там есть только печать числа-ответа. Поскольку в программе были все данные для расчета, то компилятор соптимизировал расчет до "нуля". Хитрый компилятор обманули путем вынесения исходных данных на внешний носитель.
...
Рейтинг: 0 / 0
21.06.2017, 23:50:37
    #39475831
Жышы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
bk0010Говорят, что давным-давно решили сравнить качество компиляторов фортрана на тяжелой (тогда) расчетной задаче. Все компиляторы, кроме одного, компилировали программу минут за 10 (ориентировочно), после чего расчет шел порядка полутора часов. А один компилятор компилировал несколько часов, зато ответ выдал мгновенно. Тестирующие прифигели, полезли смотреть исполняемый модуль. Оказалось, что там есть только печать числа-ответа. Поскольку в программе были все данные для расчета, то компилятор соптимизировал расчет до "нуля". Хитрый компилятор обманули путем вынесения исходных данных на внешний носитель.
Разве оптимизация - сама по себе не ценна?
...
Рейтинг: 0 / 0
22.06.2017, 00:36:37
    #39475846
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Double inc За один раз
Няшик,

О много нам открытий чудных готовит просвещения дух :) Удивляет работа чисел с конечной точностью?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Double inc За один раз / 25 сообщений из 58, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]