2011-11-24 56 views
-2
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     double x, y; 

     public Form1() 
     { 
      InitializeComponent(); 

      // Initialize input points to zero 
      textBox1.Text = "0"; 
      textBox2.Text = "0"; 
      x = Double.Parse(textBox1.Text); 
      y = Double.Parse(textBox2.Text); 
     } 

     private void radioButton1_CheckedChanged(object sender, EventArgs e) 
     {   
      x = Double.Parse(textBox1.Text); 
      y = Double.Parse(textBox2.Text); 

      if (radioButton1.Checked) 
      { 
       x = x/(System.Math.Pow(x, 2) + System.Math.Pow(y, 2)); 
       y = -y/(System.Math.Pow(x, 2) + System.Math.Pow(y, 2)); 
       textBox1.Text = x.ToString(); 
       textBox2.Text = y.ToString(); 
      } 
     } 

     private void radioButton2_CheckedChanged(object sender, EventArgs e) 
     { 
      x = Double.Parse(textBox1.Text); 
      y = Double.Parse(textBox2.Text); 

      if (radioButton2.Checked) 
      { 
       x = x/(System.Math.Pow(x, 2) + System.Math.Pow(y, 2)); 
       y = -y/(System.Math.Pow(x, 2) + System.Math.Pow(y, 2)); 
       textBox1.Text = x.ToString(); 
       textBox2.Text = y.ToString(); 
      } 
     } 
    } 
} 

我試圖「重新模擬」我的問題,這裏是代碼。嘗試在每個文本框中輸入1的值,然後單擊未選中的單選按鈕。 textbox1的預期輸出應該是0.5,textbox2應該給-0.5,但是我在textbox2中得到-0.8。C#錯誤的數學結果

+0

無法重現。完整的代碼示例或它沒有發生。 – sepp2k

+0

適用於我 - .NET 4 - 結果**是** -0.5 .... –

+0

這裏沒有錯誤([在線演示](http://ideone.com/cPSHv),使用喬恩的代碼) – Nasreddine

回答

4

看到新代碼後

好了,這裏是你修改的代碼很短,但完整版本:

using System; 

class Test 
{ 
    static void Main() 
    { 
     double x = 1; 
     double y = 1; 
     x = x/(x * x + y * y); 
     y = -y/(y * y + x * x); 


     Console.WriteLine(x); 
     Console.WriteLine(y); 
    } 
} 

現在,我得到0.5,-0.8 - 其原因是相當清楚的。在計算中,x和y的第一行的起始都是1,所以表達式爲:

x = 1.0/(1.0 * 1.0 + 1.0 * 1.0); 

所以x爲0.5。現在,影響線計算的,其變爲:

y = -1.0/(1.0 * 1.0 + 0.5 * 0.5) 

換句話說,Y = -1.0/1.25 ...其等於-0.8。

我懷疑你不想,直到你做了計算,例如賦值給xy

x2 = x/(x * x + y * y); 
y2 = -y/(y * y + x * x); 

x = x2; 
y = y2; 

我相信會解決您的問題。值得嘗試學習如何編寫一個簡短但完整的程序來幫助診斷這類事情。


原來的答覆

無法重現:

using System; 

public class Program 
{ 
    static void Main(string[] args) 
    { 
     double x = 1; 
     double y = 1; 

     x = -x/((x*x) + (y*y)); 
     Console.WriteLine(x); 
    }   
} 

結果:-0.5

請自己嘗試這個節目,如果它打印-0.5你(作爲我完全期待它),看看你是否可以想出一個類似的簡短但完整的程序演示了這個問題。我懷疑,在嘗試將當前代碼轉換爲簡短但完整的程序的過程中,您會發現該錯誤。

+1

這應該是答案還是評論? – Gabe

+1

其他人評論「無法複製」;這是相同的想法,但在註釋中包含格式正確的代碼示例是不可能的,所以...... :) –

+1

如果答案是用戶錯了,並且沒有問題,那麼是的,它應該是一個答案。 – Brandon