计算复杂的对数函数【难度:2级】:
答案1:
using System;
public class Complex
{
public static double[] Log(double[] z)
{
double x = z[0];
double y = z[1];
if(x==0&&y==0)
throw new ArgumentException();
double resX = Math.Log(Math.Sqrt(Math.Pow(x,2) + Math.Pow(y,2)));
double resY = 0;
if(x==0&&y!=0)
resY=Math.PI/2;
else if(x<0 && y<0)
resY = Math.Atan(y/x)-Math.PI;
else if(x>0)
resY = Math.Atan(y/x);
else if(x<0)
resY = Math.Atan(y/x) +Math.PI;
return new double[] {
resX,resY};
}
}
答案2:
using System;
public class Complex
{
public static double[] Log(double[] z) => z[0] == 0 && z[1] == 0 ? throw new ArgumentException() : new double[2] {
Math.Log(Math.Sqrt(z[0]* z[0] + z[1]* z[1])), Math.Atan2(z[1], z[0]) };
}
答案3:
using System;
public class Complex
{
public static double[] Log(