gpt4 book ai didi

Delphi 5 与浮点乘法和数学

转载 作者:行者123 更新时间:2023-12-03 15:50:43 25 4
gpt4 key购买 nike

我偶尔使用 Delphi 5 进行编程工作,包括为我的电子业务开发一个不错的商业应用程序。多年来我用它做了一些图形、数据库和其他一般工作。

今天,我正在做一个模拟,我想根据一些物理原理来移动像素,细节对应用程序来说并不重要,但我整个早上和昨天的一些时间都在搜索,以找出如何使用平方根和平方函数,不会得到奇怪的答案。通过检查分配给扩展变量类型“vector_length”的简单计算,我在计算时得到类似的结果(数字是固定的,但与表示这些数字的任何浮点类型的结果相同):

vector_length := Sqrt(Sqr(3.4) + Sqr(3)) 

理论上,这给了我大约 4.53。使用计算器就足够合理了。

Delphi 的调试器向我展示了这样的内容:

2.9134839203548e-322

这显然是没有意义的浮点表示。

代码没有按预期工作,所以我只能认为数学是错误的,或者我在期望函数给我一些合理结果的过程中做错了什么??

感谢您的任何意见。

最佳答案

这句话的表达没有任何问题。我用这个(Delphi 2007)进行了测试 - 我不再有 D5,但我不相信 SqrSqrt 之间有太多(如果有的话)改变他们:

program Project3;

{$APPTYPE CONSOLE}

uses
SysUtils, Math;

var
Vector_Len: Extended;

begin
Vector_Len := Sqrt(Sqr(3.4) + Sqr(3));
WriteLn('Vector_Len: ' + Format('%f', [Vector_Len]));
ReadLn;
end.

这产生了以下控制台输出:

enter image description here

不过,我认为@Uwe 是有道理的。我认为您看到的不是调试器故障;而是调试器故障。我认为这正是您决定检查值(value)的地方。将代码更改为此(这显然是一个“仅用于显示目的”测试应用程序,因为该函数在这种情况下毫无意义,并且您显然不会使用 var 然后立即分配它到结果,就像这个函数一样):

program Project3;

{$APPTYPE CONSOLE}

uses
SysUtils, Math;

function CalcVectorLen: Extended;
var
Vector_Len: Extended;
begin
Vector_Len := Sqrt(Sqr(3.4) + Sqr(3));
Result := Vector_Len;
end;

begin
WriteLn('Vector_Len: ' + Format('%f', [CalcVectorLen]));
ReadLn;
end.

Vector_Len := Sqrt( 行上设置断点,然后运行。调试器显示此输出(您的实际值可能会有所不同):

(注意:无法捕获实际的调试器弹出评估窗口,但它与 Local Variables 调试监 window 口中箭头标记的内容相同。)

enter image description here

发生的情况是,在表达式求值实际发生并将结果分配给变量之前,您正在检查 Vector_Len 的未初始化值。如果您完全运行该应用程序,您将看到控制台窗口仍然显示正确的输出。

关于Delphi 5 与浮点乘法和数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com