2012-04-26 26 views
2

は、私は私の電子ビズのための素晴らしいビジネスアプリなど、時折プログラミングの雑用のためのDelphi 5を使用しています。私は何年にもわたってグラフィックス、データベース、一般的なものを使ってきました。デルファイ5および浮動小数点乗算とと数学

今日私はいくつかの物理学に基づいてピクセルを移動したいと思っていますが、詳細はアプリでは重要ではありませんが、昨日の朝といくつかの奇妙な答えを得ることなく、平方根関数と平方関数を使用することができます。拡張変数の型「vector_length」に割り当てられている簡単な計算を検査することによって、私は計算するときに、このような何かを得る(数字は固定されているが、これらの数字を表す任意のfloat型と同じ結果):

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

ました理論的には4.53くらいです。十分に計算機を使用すると合理的です。明らかに意味がありません浮動小数点表現である

2.9134839203548e-322 

Delphiのデバッガは、私にこのような何かを示しています。

期待のようなコードは動作しませんので、私は唯一の数学が間違っているか、私は私に合理的な結果の線に沿って何かを与えるための機能を期待して何か間違ったことをやっていることを考えることができます?

ありがとうございます。

+4

上記あなたのワンライナーと間違って何も絶対にありません。 ( 'Hypot'関数を使ってより簡潔に書くことができますが。) –

+4

すでにその行を踏んだとき、またはその行に正確に入っているときにこの値が表示されていますか? –

+1

@Uwe、私はあなたがそれを釘付けたと思う。私の編集された答えを見てください。 :)あなたがそれを転がしてあなた自身の投稿をしたいのであれば、自由にしてください。私は怒らないでしょう。 –

答えて

4

表現には何の問題もありません。これは、次のコンソールを作成

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. 

:私はもはや周りD5を持っていないが、私は(どちらかといえば)あまり考えていないそれらの間SqrまたはSqrtで変更 - 私はこの(デルファイ2007)でテスト出力:

enter image description here

私は@Uweはしかし、何かに上だと思います。私はあなたが見ているのはデバッガーの不具合ではないと思います。私はあなたがその価値を調べることを決めたところだと思います。 (関数は、この文脈では意味がないとして、これは、明らかに「単に表示目的のために、」テストアプリです、あなたは明らかにvarを使用することはありませんし、この機能がないようResultにすぐにそれを割り当てます)これにコードを変更:

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デバッグウォッチウィンドウの矢印と同じものです。デバッガはこの出力を表示します(実際の値は異なる場合があります)。 )

enter image description here

何が起こっているあなたは、式の評価が実際に発生する前に、Vector_Lenの初期化されていない値を検査しているし、その結果を変数に代入されていることです。あなたを介してアプリの道の残りの部分を実行する場合は、コンソールウィンドウがまだかかわらず、正しい出力を表示する表示されます。

+0

洞察に感謝します!私はより多くのテストを進め、デバッガやディスプレイを介して何が起こっているのかを確認します。 StackOverflowの一部になりました! – user1359407

関連する問題