所以我做了這個繪製正弦波的小窗口窗體程序,但是當我把某些函數如sin(x)^x
溢出時。 請檢查此代碼,並幫助我弄清楚這一點!爲什麼這個C#函數使用System.Drawing溢出來繪製正弦波?
private void button1_Click(object sender, EventArgs e)
{
if (Completed) return;
Completed = true;
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Brushes.Black, 2.0F);
float x1 = 0;
float y1 = 0;
float y2 = 0;
float yEx = 300;
float eF = 50;
for (float x = 0; x < Width; x += 0.005F)
{
y2 = (float)Math.Pow(Math.Sin(x) , x);
g.DrawLine(pen, x1 * eF, y1 * eF + yEx, x * eF, y2 * eF + yEx);
x1 = x;
y1 = y2;
}
}
任何貢獻表示讚賞!
用於'float'的最大值是與「Int32」相同。如果結果大於2,147,483,647,則會出現溢出錯誤。您是否嘗試過使用'double'(與Int64相同的最大值 - 9,223,372,036,854,775,807)?或者檢查值以處理溢出。 – Tim
你沒有驗證你的輸入到筆中。你應該確保它們在畫布的範圍之內,因爲它不喜歡畫成任何東西。 – TyCobb
那麼寬度的值是多少?把它放入Visual Studio並使用1920這樣的值,然後打印'y2'會給我很多結果(其中許多是'NaN'),但我從來沒有發生過溢出。這是有道理的,真的 - sin(x)^ x'的範圍將被限制在(-1,1),所以不應該溢出。 – Abion47