手动平方根代码给出了奇怪的输出

时间:2016-11-10 01:26:59

标签: c# loops do-while

我正在尝试学习C#,我有兴趣尝试编写一个简单的do-while来计算一个简单数字的平方根

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {


            double x = Convert.ToDouble(Console.ReadLine());
            double root = 0;
            do
            {
                root += 0.0001;
                Console.WriteLine(root);
            }
            while ((root * root) % x != 0);


            Console.WriteLine(Math.Sqrt(x));
            Console.WriteLine(root);


        }
    }
}

如果我使用圆数+ = 0.0001;像root + = 1; 它甚至可以完美地解决问题 但是一旦我开始使用0.1或更小,它就会断裂, 甚至忽略了它在while语句中的检查。

有人可以解释为什么会这样吗? 注意:我不需要解决方案只是出现这种情况的原因。而且我知道我可以使用Math.Sqrt(value);

1 个答案:

答案 0 :(得分:1)

致@JonSkeet的回答here(以及提及它的@PaulHicks)

  

float和double是浮点二进制点类型。换句话说,它们代表了这样的数字:

     
    

10001.10010110011

  
     

二进制数和二进制点的位置都在值内编码。

     

decimal是浮点小数点类型。换句话说,它们代表了这样的数字:

     
    

12345.65789

  

这样做可以解决问题:

&self