現在、私はC#コードに少し問題があります。 "x^y^z ..."という形式の文字列を数値に変換するコードセットがあるので、このようなメソッドを設定しました。非常に長いロングタイプ番号が負になる
public long valueOfPower()
{
long[] number = Array.ConvertAll(this.power.Split('^'), long.Parse);
if(number.Length == 1)
{
return number[0];
}
long result = number[0];
long power = number[number.Length-1];
for (long i = number.Length-1; i > 1; i--)
{
power = (long)Math.Pow((int)number[(int)i-1], (int)power);
}
result= (long)Math.Pow((int)result,(int)power);
return result;
}
私が抱えている問題は、2^2^2^2^2のようなものが入力されたときに、非常に大きな負の数値が得られることです。 2^2^2^2^2は長いオブジェクトの数値が大きすぎますが、何が起こっているのか分かりません。
"this.power"が2^2^2^2^2の場合、コードが大きな負の数を返すのはなぜですか?しかし、2^2^2^2)? (ランダムなキャストについては申し訳ありませんが、別の番号のタイプを試してみました)
私はプロジェクトの 'Property'ページを開いて' Build'に行き、 'Advanced'(右下)をクリックし、' Check for arithmetic overflow /アンダーフロー。すべての設定でこれを行うようにしてください。 –
@BernhardHiller良いヒント。私は実際にそれについて知りませんでした – nhouser9