Почему я получаю неправильное значение, когда присваиваю число переменной Double или Extended? - PullRequest
0 голосов
/ 11 ноября 2019

Мне нужно присвоить значение линейному, но потом, когда я проверяю его, результат неверный. Выражение 1/exp( 2.30258509299 * (abs(dB)/20) ) result равно 0,063095734448 (это правильное значение), но линейное значение равно -3,6854775808e + 4863, а n равно 1,805186914e-307.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
  procedure OnCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnCreate;
var dB: integer;
    linear: extended;
    n: Double;
begin
  dB := -24;
  linear := 1/exp( 2.30258509299 * (abs(dB)/20) );
  n := 0.063095734448;
  showmessage(inttostr(db));
end;


end.

Что я делаю неправильно икак получить правильное значение?

Примечание: для оценки выражения я использовал команду отладчика «Оценить / изменить».

enter image description here

1 Ответ

5 голосов
/ 11 ноября 2019

Скорее всего, у вас включена оптимизация компилятора, и компилятор распознает, что переменные linear и n назначены, но затем никогда не читаются. Поэтому компилятору не нужно сохранять эти переменные после того, как они были назначены.

Попробуйте этот код

linear := 1/exp( 2.30258509299 * (abs(dB)/20) );
ShowMessage(FloatToStr(linear));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...