예를 들어, 이것을 처리하기 위해 연산자가 있습니까?
float Result, Number1, Number2;
Number1 = 2;
Number2 = 2;
Result = Number1 (operator) Number2;
과거에 ^
연산자는 다른 언어에서는 지수 연산자로 사용되었지만 C #에서는 비트 연산자입니다.
지수 연산을 처리하기 위해 루프를 작성하거나 다른 네임 스페이스를 포함시켜야합니까? 그렇다면 비 정수를 사용하여 지수 연산을 어떻게 처리합니까?
답변
C # 언어 에는 전력 연산자가 없습니다 . 그러나 .NET Framework는 Math.Pow 메서드를 제공합니다 .
지정된 거듭 제곱으로 지정된 숫자를 반환합니다.
따라서 귀하의 예는 다음과 같습니다.
float Result, Number1, Number2;
Number1 = 2;
Number2 = 2;
Result = Math.Pow(Number1, Number2);
답변
내 코드에서 과학적 표기법을 사용하려고하는이 게시물을 우연히 발견했습니다.
4.95*Math.Pow(10,-10);
그러나 나중에 나는 당신이 할 수있는 것을 발견
4.95E-10;
내가 비슷한 상황에있는 사람에게 이것을 추가 할 것이라고 생각했습니다.
답변
지수 연산자가 C # 팀 에없는 이유에 대한 MSDN 의 블로그 게시물이 MSDN에 있습니다 .
언어에 전력 연산자를 추가하는 것이 가능하지만이 작업을 수행하는 것은 대부분의 프로그램에서 수행하기 매우 드문 일이며 Math.Pow ()를 호출 할 때 연산자를 추가하는 것이 타당하지 않은 것 같습니다 .
당신은 물었다 :
지수 연산을 처리하기 위해 루프를 작성하거나 다른 네임 스페이스를 포함시켜야합니까? 그렇다면 비 정수를 사용하여 지수 연산을 어떻게 처리합니까?
Math.Pow는 이중 매개 변수를 지원하므로 직접 작성할 필요가 없습니다.
답변
C #에 대한 지수 연산자가 없다는 것은 계산 소프트웨어를 좋은 vb6에서 변환 할 새로운 언어를 찾을 때 큰 성가심이었습니다.
C #을 사용하게되어 기쁘지만 지수를 포함하여 복잡한 방정식을 작성할 때마다 여전히 짜증납니다. Math.Pow () 메서드는 방정식을 읽기 어려운 IMO로 만듭니다.
우리의 해결책은 ^ 연산자를 재정의하는 특별한 DoubleX 클래스를 만드는 것입니다 (아래 참조).
변수 중 하나 이상을 DoubleX로 선언하는 한 상당히 잘 작동합니다.
DoubleX a = 2;
DoubleX b = 3;
Console.WriteLine($"a = {a}, b = {b}, a^b = {a ^ b}");
또는 표준 복식에서 명시 적 변환기를 사용하십시오.
double c = 2;
double d = 3;
Console.WriteLine($"c = {c}, d = {d}, c^d = {c ^ (DoubleX)d}"); // Need explicit converter
이 방법의 한 가지 문제점은 지수가 다른 연산자와 비교하여 잘못된 순서로 계산된다는 것입니다. 연산 주위에 항상 여분의 ()를두면 방정식을 읽기가 더 어려워집니다.
DoubleX a = 2;
DoubleX b = 3;
Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + a ^ b}"); // Wrong result
Console.WriteLine($"a = {a}, b = {b}, 3+a^b = {3 + (a ^ b)}"); // Correct result
코드에서 복잡한 방정식을 많이 사용하는 다른 사람들에게 도움이되기를 바랍니다. 어쩌면 누군가이 방법을 개선하는 방법에 대한 아이디어가 있습니까?! 🙂
DoubleX 클래스 :
using System;
namespace ExponentialOperator
{
/// <summary>
/// Double class that uses ^ as exponential operator
/// </summary>
public class DoubleX
{
#region ---------------- Fields ----------------
private readonly double _value;
#endregion ------------- Fields ----------------
#region -------------- Properties --------------
public double Value
{
get { return _value; }
}
#endregion ----------- Properties --------------
#region ------------- Constructors -------------
public DoubleX(double value)
{
_value = value;
}
public DoubleX(int value)
{
_value = Convert.ToDouble(value);
}
#endregion ---------- Constructors -------------
#region --------------- Methods ----------------
public override string ToString()
{
return _value.ToString();
}
#endregion ------------ Methods ----------------
#region -------------- Operators ---------------
// Change the ^ operator to be used for exponents.
public static DoubleX operator ^(DoubleX value, DoubleX exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(DoubleX value, double exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(double value, DoubleX exponent)
{
return Math.Pow(value, exponent);
}
public static DoubleX operator ^(DoubleX value, int exponent)
{
return Math.Pow(value, exponent);
}
#endregion ----------- Operators ---------------
#region -------------- Converters --------------
// Allow implicit convertion
public static implicit operator DoubleX(double value)
{
return new DoubleX(value);
}
public static implicit operator DoubleX(int value)
{
return new DoubleX(value);
}
public static implicit operator Double(DoubleX value)
{
return value._value;
}
#endregion ----------- Converters --------------
}
}
답변
나는 아무도 이것을 언급하지 않은 것에 놀랐지 만, 간단하고 (아마도 가장 많이 만난) 제곱의 경우에는 그 자체가 곱해집니다.
float Result, Number1;
Result = Number1 * Number1;
답변
아무도 아직 두 개의 정수 로이 작업을 수행하는 함수를 작성하지 않았으므로 한 가지 방법이 있습니다.
private long CalculatePower(int number, int powerOf)
{
for (int i = powerOf; i > 1; i--)
number *= number;
return number;
}
CalculatePower(5, 3); // 125
CalculatePower(8, 4); // 4096
CalculatePower(6, 2); // 36
또는 VB.NET에서 :
Private Function CalculatePower(number As Integer, powerOf As Integer) As Long
For i As Integer = powerOf To 2 Step -1
number *= number
Next
Return number
End Function
CalculatePower(5, 3) ' 125
CalculatePower(8, 4) ' 4096
CalculatePower(6, 2) ' 36
답변
좋은 힘 기능은
public long Power(int number, int power) {
if (number == 0) return 0;
long t = number;
int e = power;
int result = 1;
for(i=0; i<sizeof(int); i++) {
if (e & 1 == 1) result *= t;
e >>= 1;
if (e==0) break;
t = t * t;
}
}
`Math.Pow` 기능은 프로세서 전원 기능을 사용하며보다 효율적입니다.