private void FloatingPointLogic_Click(object sender, EventArgs e)
        {
            ComputationalErrorParameters yparameters = new ComputationalErrorParameters();
            ComputationalError           zparameters = new ComputationalError();
            Double x                     = Double.Parse(this.XValue.Text);
            Double y                     = 0.0;
            Double z                     = 0.0;
            Double c                     = Double.Parse(this.LogicConstant.Text);
            Double difference            = 0.0;
            int    noofsignificantdigits = System.Convert.ToInt32(this.NumberOfSignificantNumbers.Text);
            bool   isequivelant          = false;

            y = x * 7.0;
            z = y / 7.0;

            zparameters.OriginalNumber = z;
            zparameters.significantDigitsOfANumber();
            z = zparameters.NormalizedSignificantValue * Math.Pow(10, yparameters.Magnitude);
            z = Math.Round(z, noofsignificantdigits);

            difference = Math.Abs(x - z);

            if (difference < c)
            {
                isequivelant = true;
            }

            if (this.dataGridView4.Columns.Count < 1)
            {
                this.addFloatingPointLogicColumnHeaders();
            }

            object[] rowvalues = { y, z, difference, isequivelant };
            this.dataGridView4.Rows.Add(rowvalues);
        }
        private void significantDigitsOfANumber(ref ComputationalErrorParameters value)
        {
            String[] digitsinoriginalnumber = value.OriginalNumber.ToString().Split('.');

            if (digitsinoriginalnumber.Length > 1 && System.Convert.ToInt32(digitsinoriginalnumber[0]) > 0)
            {
                this.normalizedSignificantValueWithDigitsBeforeDecimal(value.OriginalNumber, ref value);
            }
            else
            {
                this.normalizedSignificantValueWithoutDigitsBeforeDecimal(value.OriginalNumber, ref value);
            }

            this.comperrorparams.NormalizedSignificantValue = value.NormalizedSignificantValue;
            this.comperrorparams.Magnitude = value.Magnitude;
        }
        private void RoundingError_Click(object sender, EventArgs e)
        {
            ComputationalErrorParameters xvalue = new ComputationalErrorParameters();
            ComputationalErrorParameters yvalue = new ComputationalErrorParameters();

            object[] gridvalues    = new object[5];
            float    absoluteerror = 0;
            float    relativeerror = 0;
            float    x             = float.Parse(this.XValue.Text);
            float    y             = float.Parse(this.YValue.Text);

            if (this.dataGridView3.Columns.Count < 1)
            {
                this.addRoundedColumnHeaders();
            }

            if (this.dataGridView3.Rows.Count > 0)
            {
                this.dataGridView3.Rows.Clear();
            }

            xvalue.OriginalNumber = x;
            yvalue.OriginalNumber = y;

            this.significantDigitsOfANumber(ref xvalue);
            this.significantDigitsOfANumber(ref yvalue);

            for (int i = 0; i < 4; i++)
            {
                y = y + x;
                yvalue.OriginalNumber  = y;
                yvalue.CalculatedValue = y;
                this.significantDigitsOfANumber(ref yvalue);

                absoluteerror = yvalue.NormalizedSignificantValue - (float)Math.Round(yvalue.NormalizedSignificantValue, 4);
                relativeerror = absoluteerror / yvalue.NormalizedSignificantValue;

                gridvalues[0] = yvalue.NormalizedSignificantValue;
                //gridvalues[1] = calculated.Magnitude;
                gridvalues[1] = Math.Round(yvalue.NormalizedSignificantValue, 4);
                gridvalues[2] = absoluteerror;
                gridvalues[3] = relativeerror;
                gridvalues[4] = yvalue.CalculatedValue;
                dataGridView3.Rows.Add(gridvalues);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ComputationalErrorParameters calculated = new ComputationalErrorParameters();
            ComputationalErrorParameters truncated  = new ComputationalErrorParameters();

            object[] gridvalues = new object[5];

            float x = this.comperrorparams.NormalizedSignificantValue;

            calculated.OriginalNumber = x;

            float absoluteerror = 0;
            int   iterations    = System.Convert.ToInt32(this.NumberOfIterations.Text);
            int   truncate      = System.Convert.ToInt32(this.NumberOfSignificantNumbers.Text);

            truncated.Magnitude = this.comperrorparams.Magnitude;
            float xtruncated = 0;

            if (this.dataGridView2.Columns.Count < 1)
            {
                this.addComputeErrorColumnHeaders();
            }

            if (this.dataGridView2.Rows.Count > 0)
            {
                this.dataGridView2.Rows.Clear();
            }

            for (int i = 1; i <= iterations; i++)
            {
                x = x + x;
                truncated.OriginalNumber  = x;
                calculated.OriginalNumber = x;
                this.significantDigitsOfANumber(ref calculated);
                xtruncated    = this.truncatetosignificantdigits(x, truncate, ref truncated);
                absoluteerror = calculated.NormalizedSignificantValue - xtruncated;

                gridvalues[0] = calculated.NormalizedSignificantValue;
                //gridvalues[1] = calculated.Magnitude;
                gridvalues[1] = xtruncated;
                gridvalues[2] = absoluteerror;
                gridvalues[3] = (absoluteerror / calculated.NormalizedSignificantValue);
                gridvalues[4] = calculated.OriginalNumber;
                dataGridView2.Rows.Add(gridvalues);
            }
        }
        private void significantDigitsOfAFloat()
        {
            this.comperrorparams.OriginalNumber = float.Parse(this.FloatingPointNumber.Text);

            ComputationalErrorParameters errorparams = new ComputationalErrorParameters();

            errorparams.OriginalNumber = float.Parse(this.FloatingPointNumber.Text);
            errorparams.Magnitude      = System.Convert.ToInt32(this.PowerOfTen.Text);

            this.significantDigitsOfANumber(ref errorparams);

            if (dataGridView1.Columns.Count < 1)
            {
                this.addPrecisionMagnitudeColumnHeaders();
            }

            //object[] values = { fractionalpart, mostsiginficantdigit, precision, magnititude, aen, Math.Truncate(float.Parse(this.FloatingPointNumber.Text)) };
            object[] values = { errorparams.NormalizedSignificantValue, errorparams.MostSignificantDigit, errorparams.Precision, errorparams.Magnitude, errorparams.AEN, Math.Truncate(errorparams.OriginalNumber) };

            this.comperrorparams.NormalizedSignificantValue = errorparams.NormalizedSignificantValue;
            this.comperrorparams.Magnitude = errorparams.Magnitude;

            dataGridView1.Rows.Add(values);
        }
        private StringBuilder normalizedSignificantValueWithoutDigitsBeforeDecimal(float value, ref ComputationalErrorParameters parameters)
        {
            String[] digitsinoriginalnumber = value.ToString().Split('.');
            int      numberofzerosbeforenonzerodigitafterdecimalpoint = this.numberOfDigitsAfterDecimalPoint(value);

            char[]        digitsafterdecimalpoint    = digitsinoriginalnumber[1].ToCharArray();
            StringBuilder normalizedsignificantvalue = new StringBuilder();

            normalizedsignificantvalue.Append('.');

            for (int iteration = (digitsafterdecimalpoint.Length - numberofzerosbeforenonzerodigitafterdecimalpoint); iteration < digitsafterdecimalpoint.Length; iteration++)
            {
                normalizedsignificantvalue.Append(digitsafterdecimalpoint[iteration]);
            }

            parameters.Magnitude = parameters.Magnitude + (digitsafterdecimalpoint.Length - numberofzerosbeforenonzerodigitafterdecimalpoint);
            parameters.NormalizedSignificantValue = float.Parse(normalizedsignificantvalue.ToString());

            return(normalizedsignificantvalue);
        }
        private float truncatetosignificantdigits(float value, int significantdigits, ref ComputationalErrorParameters currentcomperrorparams)
        {
            float returnValue = 0;

            this.significantDigitsOfANumber(ref currentcomperrorparams);
            char[]        digitsinvalue        = this.comperrorparams.NormalizedSignificantValue.ToString().ToCharArray();
            StringBuilder truncateddigitsvalue = new StringBuilder(".");

            for (int i = 2; i < significantdigits + 2; i++)
            {
                truncateddigitsvalue.Append(digitsinvalue[i]);
            }

            returnValue = float.Parse(truncateddigitsvalue.ToString());

            return(returnValue);
        }