Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Hỏi đáp về giá trị Nan trong c#

23:27 29-07-2023 588 lượt xem 2 bình luận

Mọi người cho em hỏi là lúc mình thử tự viết bộ giải phương trình bậc 3 thì lúc mình chạy thì lúc ra đáp án được mà lúc thì ra giá trị NaN, cái này em cũng không biết là lỗi gì nữa mong mọi người giải đáp

Code dưới phần trả lời

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
trunghoang123 đã bình luận 23:29 29-07-2023

Code đây nhé

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


class Program
{

  static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.UTF8;
        double a, b, c, d, Delta, giaTriK, soPi;
        string stra, strb, strc, strd;
        Console.WriteLine("Phương trình bậc 3 có dạng ax^3 + bx^2 + cx + d\n");
        Console.Write("a = ");
        stra = Console.ReadLine();
        Console.Write("b = ");
        strb = Console.ReadLine();
        Console.Write("c = ");
        strc = Console.ReadLine();
        Console.Write("d = ");
        strd = Console.ReadLine();

        a = double.Parse(stra);
        b = double.Parse(strb);
        c = double.Parse(strc);
        d = double.Parse(strd);

        Delta = (b * b ) - (3 * a * c);
        soPi = Math.PI;
        Console.WriteLine("Delta = {0}", Delta);
        giaTriK = ((9 * a * b * c) - 2 * Math.Pow(b, 3) - 27 * a * a * d) / (2 * Math.Sqrt(Math.Pow(Math.Abs(Delta), 3)));
        Console.WriteLine("k = {0}", giaTriK);
        double x, x1, x2, x3, khiDeltaBang0;
        khiDeltaBang0 = (b * b * b) - (27 * a * a * d);
        if(Delta > 0)
        {
            if (giaTriK <= 1)
            {
                Math.Abs(giaTriK);
                x1 = ((2 * Math.Sqrt(Delta) * Math.Cos(Math.Acos(giaTriK) / 3)) - b) / 3 * a;
                x2 = ((2 * Math.Sqrt(Delta) * Math.Cos((Math.Acos(giaTriK) / 3) - ((2 * soPi) / 3))) - b) / 3 * a;
                x3 = ((2 * Math.Sqrt(Delta) * Math.Cos((Math.Acos(giaTriK) / 3) + ((2 * soPi) / 3))) - b) / 3 * a;
                Console.WriteLine("Phương trình có nghiệm x1 = {0}; x2 = {1}; x3 = {2}", x1, x2, x3);
            }
            else if (giaTriK > 1)
            {
                x = ((Math.Sqrt(Delta) * giaTriK) / (3 * a * giaTriK)) * ((Math.Cbrt(Math.Abs(giaTriK) + Math.Sqrt(giaTriK * giaTriK - 1))) + (Math.Cbrt(Math.Abs(giaTriK) - Math.Sqrt(giaTriK * giaTriK - 1)))) - (b / (3 * a));
                Console.WriteLine("Phương trình có một nghiệm duy nhất x = {0}", x);
            }
        }
        else if(Delta == 0)
        {
            if (khiDeltaBang0 == 0)
            {
                x = (-b) / (3 * a);
                Console.WriteLine("Phương trình có một nghiệm bội x = {0}", x);
            }
            else
            {
                x = ((-b) + Math.Cbrt((b * b * b) - (27 * a * a * d))) / 3 * a;
                Console.WriteLine("Phương trình có một nghiệm duy nhất x = {0}", x);
            }
        }
        else if(Delta < 0)
        {
            x = (((Math.Sqrt(Math.Abs(Delta))) / (3 * a)) * ((Math.Cbrt(giaTriK + Math.Sqrt((giaTriK * giaTriK) - 1))) + (Math.Cbrt(giaTriK - Math.Sqrt((giaTriK * giaTriK) - 1))))) - (b / (3 * a));
            Console.WriteLine("Phương trình có một nghiệm duy nhất x = {0}", x);
        }    


    }

}

 

Câu hỏi mới nhất