Как найти квадратный корень? - C#
Формулировка задачи:
Здравствуйте!
Решил я сделать для личных нужд программу, которая ищет кинетическую энергию с учетом того, что при суб-световых скоростях импульс тела увеличивается (Хоть до бесконечности).
Эта программа вполне нормально работает при больших скоростях. Ноо :
1. При малых значениях она дает меньший результат (Например, при массе в 5кг и скорости в 7м/с программа выдает 199 Дж (Окгругленно), вместо чуть больше, чем 245 Дж (Опять же чуть больше 245 из-за округления))
2. При очень малых значениях получаются числа типа "0.9999999999999999888734994395", и программа выдает квадр. корень 1, из-за чего на выходе получается 0.
Вот код (Код прям кривой конечно, но он хоть работает):
Вот формула: Eк = mc²(1/√(1-v²/c²) - 1)
Буду благодарен, если подскажите, как исправить или из-за чего возникают эти 2 проблемы
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();
Решение задачи: «Как найти квадратный корень?»
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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д