0

この質問は何度も聞かれますが、動作させることができません...

私は2点間の距離を計算し、ユニットがその周りを歩く時間を計算するプログラムに取り組んでいます...

これは私がする必要があることの単純化されたバージョンです:

x = 24 
y = 23

Root of (24² + 23²) = 33.24 fields

33.24 x 30 = 997,2 minuts

997,2/60 = 16,62 hours
16: (60*0.62) = 16:37,2   
16:37: (60*0,2) = 16:37:12

だから私はC#でこのコードを持っていますが、それは機能していません:

first_town = "35|629";
second_town = "59|606";
snelheidUnit = 30;

string[] firstTownSplit = first_town.Split('|');
string[] secondTownSplit = second_town.Split('|');
int firstTownPart1 = Convert.ToInt32(firstTownSplit[0]);
int firstTownPart2 = Convert.ToInt32(firstTownSplit[1]);
int secondTownPart1 = Convert.ToInt32(secondTownSplit[0]);
int secondTownPart2 = Convert.ToInt32(secondTownSplit[1]);

int verschilX = firstTownPart1 - secondTownPart1;
int verschilY = firstTownPart2 - secondTownPart2;

double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY,2)));       // Fields
double aantalMinuten = aantalVelden * snelheidUnit;             // Minuts
double aantalUren = aantalMinuten / 60;                 // Hours

TimeSpan time = TimeSpan.FromHours(aantalUren);
string FinalTime = string.Format("{0:D2}d:{1:D2}h:{2:D2}m:{3:D2}s:{4:D3}ms", time.Days, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);      

期待される出力は次のようになります:00d:16h:37m:12s:772ms

しかし、それは:00d:16h:37m:14s:772ms

差は2秒です。ボトルネックは何ですか?期待される出力と実際の出力の間に2秒の差があるのはなぜですか?

4

3 に答える 3

2

(24²+23²)のルート=33.24フィールド

の平方根は正確1105ではありません; 平方根を丸めた場合にのみ得られます。したがって、問題の説明を比較してください。 33.2433.24

33.24 x 30 = 997,2 minuts

997,2/60 = 16,62 hours
16: (60*0.62) = 16:37,2   
16:37: (60*0,2) = 16:37:12

平方根のより正確な値で何が起こるかに対して:

33.241540277189322804630581542105 * 30 = 997.24620831567968413891744626316 minutes
less 16 hours (960 minutes) leaves 37.246208315679684138917446263157 minutes
less 37 minutes leaves 0.246208315679684138917446263157 minutes
which gives 14.772498940781048335046775789394 seconds

これはあなたが得ているものとは約2秒異なります

元の計算を再現したい場合は、後で何かをする必要があります

double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY,2)));       // Fields

オリジナルと同じ方法でそれを丸めます。例えば、

aantalVelden  = Math.Round(aantalVelden, 2);
于 2012-10-03T07:58:21.533 に答える
1

正常に動作しているようです。10進数の値にはわずかな違いがあり、最終的には期待される結果と数秒の差が生じます。これが私が使用したコードです:

        double verschilX = 24;
        double verschilY = 23;
        double snelheidUnit = 30;

        double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY, 2)));       // Fields 
        double aantalMinuten = aantalVelden * snelheidUnit;             // Minuts 
        double aantalUren = aantalMinuten / 60;                 // Hours 

        TimeSpan time = TimeSpan.FromHours(aantalUren);
        string FinalTime = string.Format("{0:D2}d:{1:D2}h:{2:D2}m:{3:D2}s:{4:D3}ms", time.Days, time.Hours, time.Minutes, time.Seconds, time.Milliseconds); 
于 2012-10-03T07:37:25.847 に答える
0

私はあなたのコードを取りましたが、それはコンパイルされませんでした

        double verschilY = 24;
        double verschilX = 23;
        double aantalVelden = Math.Sqrt((Math.Pow(verschilX, 2) + Math.Pow(verschilY, 2)));       // Fields 
        double aantalMinuten = aantalVelden * 30;             // Minuts 
        double aantalUren = aantalMinuten / 60;                 // Hours 
        TimeSpan time = TimeSpan.FromHours(aantalUren); 
        string FinalTime = string.Format("{0:D2}d:{1:D2}h:{2:D2}m:{3:D2}s:{4:D3}ms", time.Days, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
        Console.WriteLine(FinalTime);

そして、それは正しい答えで戻ってきました。

于 2012-10-03T07:35:41.110 に答える