加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – Embarcadero RAD Studio XE2调试器中显示的局部变量的

发布时间:2020-12-15 09:49:22 所属栏目:大数据 来源:网络整理
导读:记下以下记录: TVector2D = record public class operator Equal(const V1,V2: TVector2D): Boolean; class operator Multiply(const D: Accuracy; const V: TVector2D): TVector2D; class operator Divide(const V: TVector2D; const D: Accuracy): TVecto
记下以下记录:

TVector2D = record
  public
    class operator Equal(const V1,V2: TVector2D): Boolean;
    class operator Multiply(const D: Accuracy; const V: TVector2D): TVector2D;
    class operator Divide(const V: TVector2D; const D: Accuracy): TVector2D;
    class function New(const x,y: Accuracy): TVector2D; static;
    function Magnitude: Accuracy;
    function Normalised: TVector2D;
  public
    x,y: Accuracy;
  end;

使用定义为的方法:

class operator TVector2D.Equal(const V1,V2: TVector2D): Boolean;
  var
    A,B: Boolean;
  begin
    Result := (V1.x = V2.x) and (V1.y = V2.y);
  end;

  class operator TVector2D.Multiply(const D: Accuracy; const V: TVector2D): TVector2D;
  begin
    Result.x := D*V.x;
    Result.y := D*V.y;
  end;

  class operator TVector2D.Divide(const V: TVector2D; const D: Accuracy): TVector2D;
  begin
    Result := (1.0/D)*V;
  end;

  class function TVector2D.New(const x,y: Accuracy): TVector2D;
  begin
    Result.x := x;
    Result.y := y;
  end;

  function TVector2D.Magnitude;
  begin
    RESULT := Sqrt(x*x + y*y);
  end;

  function TVector2D.Normalised: TVector2D;
  begin
    Result := Self/Magnitude;
  end;

和常数:

const
    jHat2D : TVector2D = (x: 0; y: 1);

我希望(jHat2D = TVector2D.New(0,0.707).Normalised)的布尔值为True.然而它出来是假的.

在调试器TVector2D.New(0,0.707).Normalised.y中显示为1.

不可能是这正好是1,否则布尔值(jHat2D = TVector2D.New(0,0.707).Normalised)将为True.

有任何想法吗?

编辑

精度是一种定义为:精度=双精度的类型

解决方法

假设Accuracy是Double类型的同义词,这是调试器可视化浮点值的错误.由于浮点内部表示的固有问题,v1.Y和v2.Y的值略有不同,尽管两者都接近1.

为v1.y和v2.y添加手表.确保将这些监视值配置为表示“浮点”值,并将数字设置为18以获得最大细节.

在断点处你会看到:

v1.y      = 1
v2.y      = 0.999999999999999889

(whosrdaddy在问题的评论中提供了上述简短版本,但我保留了我的调查的长期形式 – 见结论后面的行 – 因为它可能在其他类似的情况下以及潜在的兴趣中证明是有用的)

结论

虽然调试器可视化严格地说是不正确的(或者最好是误导性的),但它们从来都不是非常正确的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读