5. 實數與二進位數之編碼解碼

namespace Q5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        { // 1000101110110101000111
            // 0.637197
            double min = double.Parse(x1.Text);
            double max = double.Parse(x2.Text);

            var prec = int.Parse(x3.Text);
            int parts = (int)Math.Ceiling((max - min) * Math.Pow(10, prec));
            int bits = (int)(Math.Ceiling(Math.Log2(parts)));
            var t = textBox2.Text;
            //MessageBox.Show(parts + "/" + bits);
            if (t.Any(r => r != '0' && r != '1'))
            {
                double xp = (double.Parse(t) - min) * (Math.Pow(2, bits) - 1) / (max - min);

                string k = Convert.ToString((int)Math.Ceiling(xp), 2);
                label5.Text = "Ans= " + k.PadLeft(bits,'0');
            }
            else
            {
                double sum = 0;
                for (int i = 0; i < bits; i++)
                {
                    sum += Math.Pow(2, i) * (textBox2.Text[textBox2.Text.Length - i - 1] - '0');
                }
                label5.Text = "Ans= " + (min + sum * (max - min) / (Math.Pow(2, bits) - 1)).ToString("f" + prec);
            }
        }
    }
}

Last updated