Как найти квадратный корень? - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Решил я сделать для личных нужд программу, которая ищет кинетическую энергию с учетом того, что при суб-световых скоростях импульс тела увеличивается (Хоть до бесконечности). Эта программа вполне нормально работает при больших скоростях. Ноо : 1. При малых значениях она дает меньший результат (Например, при массе в 5кг и скорости в 7м/с программа выдает 199 Дж (Окгругленно), вместо чуть больше, чем 245 Дж (Опять же чуть больше 245 из-за округления)) 2. При очень малых значениях получаются числа типа "0.9999999999999999888734994395", и программа выдает квадр. корень 1, из-за чего на выходе получается 0. Вот код (Код прям кривой конечно, но он хоть работает):
string _TotalEnergy = null, _C = "89875517873681764";
double _Mass, _Velocity;
 
Console.Clear();
Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ","):");
Console.WriteLine("Масса (КГ) :");
_Mass = Convert.ToDouble(Console.ReadLine());
Console.Clear();
Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ","):");
Console.WriteLine("Масса = " + _Mass + " КГ");
Console.WriteLine("Скорость (М/С) :");
_Velocity = Convert.ToDouble(Console.ReadLine());
Console.Clear();
Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ","):");
Console.WriteLine("Масса = " + _Mass + " КГ");
Console.WriteLine("Скорость = " + _Velocity + " М/С");
 
string _vel = Convert.ToString(_Velocity * _Velocity);
double _dbl1= Convert.ToDouble(_vel) / Convert.ToDouble(_C);
_TotalEnergy = Convert.ToString(_dbl1);
double _dbl2 = Convert.ToDouble(_TotalEnergy);
decimal _dcm1 = 1 - Convert.ToDecimal(_dbl2);
_TotalEnergy = Convert.ToString(_dcm1);
double _dbl3 = Convert.ToDouble(_TotalEnergy);
double _dbl4 = Math.Sqrt(_dbl3);
double _dbl5 = 1 / _dbl4;
double _dbl6 = _dbl5 - 1;
double _dbl7 = _dbl6 * Convert.ToInt64(_C) * _Mass;
decimal _dcm2 = Convert.ToDecimal(_dbl7);
_TotalEnergy = Convert.ToString(_dcm2);
 
Console.WriteLine("================================");
Console.WriteLine("Для разгона объекта массой " + _Mass + " кг до скорости " + _Velocity + " м/с потребуется\n" + _TotalEnergy + " Дж");
Console.ReadKey();
Вот формула: Eк = mc²(1/√(1-v²/c²) - 1) Буду благодарен, если подскажите, как исправить или из-за чего возникают эти 2 проблемы

Решение задачи: «Как найти квадратный корень?»

textual
Листинг программы
using System;
 
namespace Jesterru
{
    class Program
    {
        static void Main(string[] args)
        {
            double c = 299792458;
 
            Console.Clear();
            Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ", "):");
            Console.WriteLine("Масса (Кг) :");
            double mass = 5;// Convert.ToDouble(Console.ReadLine());
            Console.Clear();
            Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ", "):");
            Console.WriteLine("Масса = " + mass + " кг");
            Console.WriteLine("Скорость (м/с) :");
            double velocity = 7;// Convert.ToDouble(Console.ReadLine());
            Console.Clear();
            Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ", "):");
            Console.WriteLine("Масса = " + mass + " кг");
            Console.WriteLine("Скорость = " + velocity + " м/с");
 
            double a = 1 - (Math.Pow(velocity, 2) / Math.Pow(c, 2));
            double totalEnergy = (mass * Math.Pow(velocity, 2)) / (a + Math.Sqrt(a));
 
            Console.WriteLine("================================");
            Console.WriteLine("Для разгона объекта массой " + mass + " кг до скорости " + velocity + " м/с потребуется\n" + totalEnergy + " Дж");
            Console.ReadKey();
        }
    }
}

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы