Страница 1 из 1

Неявные преобразования в выражениях

СообщениеДобавлено: 21.02.2014 15:54:02
dedm0zaj
Прошу разъяснить пару вещей.

Допустим у нас есть код

Код: Выделить всё
var
  a, b :integer;
  s :single;
begin
  a := 10;
  b := 3;
  s := a/b;
end.


Как я понял, выражение a/b преобразуется в Extended, а потом ещё раз в Single для s. Правильно ли я понял?

И например
Код: Выделить всё
var
  a, b :integer;
begin
  a := 10;
  b := round(a * 0.1);
end.


Правильно ли я понимаю, что a * 0.1 преобразуется в Extended?

Если всё так, то можно ли как нить уменьшить точность таких вычислений? Ведь, например, для Single нам вовсе не требуется считать Extended'ом.

Re: Неявные преобразования в выражениях

СообщениеДобавлено: 21.02.2014 20:14:30
hinst
Код: Выделить всё
s := Single(a) / b

ну я думаю понятно

Re: Неявные преобразования в выражениях

СообщениеДобавлено: 22.02.2014 00:43:19
Sharfik
dedm0zaj писал(а):Если всё так, то можно ли как нить уменьшить точность таких вычислений? Ведь, например, для Single нам вовсе не требуется считать Extended'ом.

Купи книжку по Ассемблеру, если хорошую купишь там в начале будет теория работы процессора и регистров.
Какая тебе разница какая точность, когда у тебя во всех случаях будет Integer. Оптимизация расчета с точками не твоя забота, а процессора.

Re: Неявные преобразования в выражениях

СообщениеДобавлено: 23.02.2014 11:48:58
Дож
Sharfik писал(а):
dedm0zaj писал(а):Если всё так, то можно ли как нить уменьшить точность таких вычислений? Ведь, например, для Single нам вовсе не требуется считать Extended'ом.

Купи книжку по Ассемблеру, если хорошую купишь там в начале будет теория работы процессора и регистров.
Какая тебе разница какая точность, когда у тебя во всех случаях будет Integer. Оптимизация расчета с точками не твоя забота, а процессора.


Вы, наверно, хотели сказать: «Купи книжки по всем Ассемблерам»? :)