powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Double inc За один раз
25 сообщений из 58, страница 1 из 3
Double inc За один раз
    #39475698
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код выдаёт 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
Double inc За один раз
    #39475713
BlackEric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик,

Вообще-то правильный именно второй вариант. Здесь проблема в точности работы с вещественными числами.
...
Рейтинг: 0 / 0
Double inc За один раз
    #39475719
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик...
Какие нужны хитрости, что бы получить результаты как в первом варианте ?
Разобраться в том, как Double представляется в двоичном коде.
...
Рейтинг: 0 / 0
Double inc За один раз
    #39475736
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикЭтот код выдаёт 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
Double inc За один раз
    #39475739
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЖышыА вот десятичное значение 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
Double inc За один раз
    #39475741
Жышы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик...
Я уже тестировал

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

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

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


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

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

Я вот тебя молоком практически из собственной натруженной груди кормлю, а ты кусаешься:
...
Рейтинг: 0 / 0
Double inc За один раз
    #39475752
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик, Какие нужны хитрости,
На, балуйся:
Код: 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
Double inc За один раз
    #39475753
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bred eFeM,

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




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




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

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

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


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

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

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

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


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

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

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

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

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


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