首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#中有指数运算符吗?

C#中有指数运算符吗?
EN

Stack Overflow用户
提问于 2010-06-14 09:31:36
回答 7查看 259.9K关注 0票数 221

例如,是否存在处理此问题的运算符?

代码语言:javascript
复制
float Result, Number1, Number2;

Number1 = 2;
Number2 = 2;

Result = Number1 (operator) Number2;

在过去,^运算符在其他语言中用作指数运算符,但在C#中它是按位运算符。

我是否必须编写一个循环或包含另一个名称空间来处理指数运算?如果是这样,我如何使用非整数处理指数运算?

EN

回答 7

Stack Overflow用户

发布于 2014-01-11 13:47:48

我偶然发现了这篇文章,希望在我的代码中使用科学记数法,我使用

代码语言:javascript
复制
4.95*Math.Pow(10,-10);

但后来我发现你可以

代码语言:javascript
复制
4.95E-10;

我只是想为我所处的类似情况的任何人添加这一点。

票数 60
EN

Stack Overflow用户

发布于 2017-08-24 15:19:30

当我们寻找一种新的语言来将我们的计算软件从好的vb6转换成指数型运算符时,缺少C#的指数运算符是一个很大的困扰。

我很高兴我们使用了C#,但每当我写一个包含指数的复杂方程时,它仍然困扰着我。Math.Pow()方法使得方程很难读懂。

我们的解决方案是创建一个特殊的DoubleX类,在其中覆盖^-operator (如下所示)

只要您至少将一个变量声明为DoubleX,这就可以很好地工作

代码语言:javascript
复制
DoubleX a = 2;
DoubleX b = 3;

Console.WriteLine($"a = {a}, b = {b}, a^b = {a ^ b}");

或者在标准双精度数上使用显式转换器:

代码语言:javascript
复制
double c = 2;
double d = 3;

Console.WriteLine($"c = {c}, d = {d}, c^d = {c ^ (DoubleX)d}");     // Need explicit converter

然而,这种方法的一个问题是,与其他运算符相比,指数的计算顺序错误。这可以通过始终在操作周围放置额外的( )来避免,这再次增加了读取公式的难度:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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 --------------
    }
}
票数 14
EN

Stack Overflow用户

发布于 2014-07-31 12:23:01

我很惊讶没有人提到这一点,但对于简单的平方(也可能是最常见的)情况,您只是自己乘以。

代码语言:javascript
复制
float someNumber;

float result = someNumber * someNumber;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3034604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档