精华内容
下载资源
问答
  • 幂运算运算符by Christoph Michel 克里斯托夫·米歇尔(Christoph Michel) 我在V8的幂运算符中发现了一个错误 (I found a bug in V8’s Exponentiation Operator) I always thought that the new ES6 ...

    幂运算运算符

    by Christoph Michel

    克里斯托夫·米歇尔(Christoph Michel)

    我在V8的幂运算符中发现了一个错误 (I found a bug in V8’s Exponentiation Operator)

    I always thought that the new ES6 exponentiation operator x ** y was the same as Math.pow(x,y).

    我一直认为新的ES6指数运算符x ** yMath.pow(x,y)

    Indeed this is what the specification says about Math.pow:

    实际上,这就是规范Math.pow

    Return the result of Applying the ** operator with base and exponent as specified in 12.6.4.
    返回将12.6.4中指定的带有基数和指数的**运算符应用的结果。

    12.6.4 — Applying the ** Operator states that the result is implementation-dependent — but there should still be no discrepancy between ** and Math.pow.

    12.6.4 — 应用**运算符表示结果取决于实现 ,但**Math.pow之间仍然应该没有差异。

    However, evaluating the following in the current V8 JS Engine (Chrome / Node) results in this:

    但是,在当前的V8 JS引擎(Chrome / Node)中评估以下内容会导致:

    console.log('1.35 ** 92', 1.35 ** 92)                   // 978828715394.7672console.log('Math.pow(1.35, 92)', Math.pow(1.35, 92))   // 978828715394.767

    The exponentiation operator ** returns a more accurate approximation.

    求幂运算符**返回更精确的近似值。

    But this is not the only weirdness with the exponentiation operator: Let’s try evaluating the same with variables (REPL) — it shouldn’t make any difference:

    但这不是幂运算符的唯一怪异:让我们尝试使用变量( REPL )进行评估—它不会有任何区别:

    const exponent = 92;console.log(`1.35 ** exponent`, 1.35 ** exponent)                   // 978828715394.767console.log('1.35 ** 92', 1.35 ** 92)                               // 978828715394.7672console.log(`Math.pow(1.35, exponent)`, Math.pow(1.35, exponent))   // 978828715394.767console.log('Math.pow(1.35, 92)', Math.pow(1.35, 92))               // 978828715394.767

    But it does: 1.35 ** 92 differs from 1.35 ** exponent.

    但确实如此: 1.35 ** 921.35 ** exponent不同。

    So what seems to be happening here is that the compiler processes the JS code 1.35 ** 92 which is already constant folded

    因此,这里似乎正在发生的事情是,编译器处理了已经固定折叠的JS代码1.35 ** 92

    This makes sense as V8 really compiles to machine code.

    由于V8确实可以编译为机器代码,因此这很有意义。

    V8 increases performance by compiling JavaScript to native machine code before executing it, versus executing bytecode or interpreting it.

    V8通过在执行之前将JavaScript编译为本地机器代码,而不是执行字节码或解释它来提高性能。

    V8 works by first interpreting the JS code with their Ignition Interpreter. It does a second run with the TurboFan compiler optimizing the machine code.

    V8的工作方式是首先使用其点火解释器解释JS代码 它使用TurboFan编译器进行第二次运行,以优化机器代码

    TurboFan now does constant folding. Its exponentiation algorithm has a better precision than the JIT compiler’s (Ignition) exponentiation algorithm.

    TurboFan现在可以不断折叠。 它的幂运算算法比JIT编译器的(Ignition)幂运算算法具有更高的精度。

    If you try the same in other JS engines like Firefox’s SpiderMonkey, the result is a consistent value of 978828715394.767 among all computations.

    如果您在其他JS引擎(例如Firefox的SpiderMonkey)中尝试相同的操作,则结果是所有计算中的值始终为978828715394.767

    是虫子吗? (Is it a bug?)

    I would say so, although it wasn’t severe in my code. But it’s still not following the spec that says Math.pow and ** should result in the same value.

    我会这么说,尽管在我的代码中并不严格。 但是它仍然没有遵循说Math.pow**应该产生相同值的规范。

    If you’re transpiling the code with babel, x ** y is translated to Math.pow(x,y), which again leads to discrepancies between transpiled and untranspiled code. As we have seen, Math.pow(1.35, 92) is not being optimized (only operators seem to be optimized by V8). Therefore, 1.35 ** 92 results in different code when transpiled to ES5.

    如果您使用babel编译代码,则x ** y会转换为Math.pow(x,y) ,这又会导致已编译和未编译的代码之间出现差异。 如我们所见, Math.pow(1.35, 92) 尚未优化(似乎只有V8对运算符进行了优化)。 因此,当转换为ES5时, 1.35 ** 92会生成不同的代码。

    Using this bug and disregarding any clean code practices, we can write a nice function to determine if we’re running on Chrome (unless you transpile your code ?):

    使用此错误并忽略任何干净的代码实践,我们可以编写一个不错的函数来确定我们是否在Chrome上运行(除非您将代码转译为?):

    function isChrome() {    return 1.35 ** 92 !== Math.pow(1.35, 92)}

    Still more readable than user agent strings. ?

    比用户代理字符串更具可读性。 ?

    Originally published at cmichel.io

    最初发布于cmichel.io

    翻译自: https://www.freecodecamp.org/news/i-found-a-bug-in-v8s-exponentiation-operator-dcddfa5b8482/

    幂运算运算符

    展开全文
  • 1、VB里面求运算符是“^” 2、C++没有求运算符, c++头文件加 #include<math.h>使用pow(x,y),可算出x的y次 3、C++中 “^”是按位“异或”运算符。 转载于:...

    1、VB里面求幂的运算符是“^”

    2、C++没有求幂的运算符,

    c++头文件加 #include<math.h>
    使用pow(x,y),可算出x的y次幂

    3、C++中 “^”是按位“异或”运算符。

    转载于:https://www.cnblogs.com/happykoukou/p/5371469.html

    展开全文
  • 运算符幂运算

    2021-03-30 21:54:39
    运算符幂运算运算符 操作数都是二进制数 按位与(&):两个操作数的对应位都为1,结果才为1,否则结果为0 按位或(|):两个操作数的对应位都为0,结果才为0,否则结果为1 按位取反(~):本操作数的该...

    位运算符与幂运算

    位运算符

    1. 操作数都是二进制数

    2. 按位与(&):两个操作数的对应位都为1,结果才为1,否则结果为0

    3. 按位或(|):两个操作数的对应位都为0,结果才为0,否则结果为1

    4. 按位取反(~):本操作数的该位为0,结果为1,否则结果为0

    5. 按位异或(^):两个操作数的对应位相同,结果为0,否则结果为18

    6. 移位操作:

      1. 左移(<<):y<<n相当于y*(2的n次幂)。

      2. 右移(>>):y>>n相当于y/(2的n次幂)。

      3. 一道经典例题:怎样计算2*8效率最高?

        答:2*8=2*2*2*2=2<<3。

    幂运算

    幂运算没有专门的运算符,需要借助Math类中的pow方法,Math.pow(x,y)=x的y次幂

    double e = Math.pow(2,4);
    System.out.println(e);		//e=16
    
    展开全文
  • Python运算符1、 算术运算符Ø +(加)、-(减)、*(乘)、/(除),这四个运算符是跟数学上的意义一致。Ø %(取余):两者相除取余数。Ø //(取整):两者相除取整数。Ø **():x的y次。a=100b=21c=2d=5...

    Python运算符

    1、 算术运算符

    Ø +(加)、-(减)、*(乘)、/(除),这四个运算符是跟数学上的意义一致。

    Ø %(取余):两者相除取余数。

    Ø //(取整):两者相除取整数。

    Ø **(幂):x的y次幂。

    a=100

    b=21

    c=2

    d=5

    print(a+b)

    print(a-b)

    print(a/b)

    print(a*b)

    print(a%b)

    print(a//b)

    print(c**d)

    输出结果:

    C:\Users\leizh\AppData\Local\Programs\Python\Python37\python.exe C:/Users/leizh/PycharmProjects/test1/suanfa.py

    121

    79

    4.761904761904762

    2100

    16

    4

    32

    2、 比较运算符

    ==等于;!=不等于;>大于;<小于;>=大于等于;<=小于等于。

    3、 赋值运算符

    Ø =:简单的赋值运算符。

    Ø +=:加法赋值运算符,a+=b等效于a=a+b。

    Ø -=:减法赋值运算符,a-=b等效于a=a-b。

    Ø *=:乘法赋值运算符,a*=b等效于a=a*b。

    Ø /=:除法赋值运算符,a/=b等效于a=a/b。

    Ø %=:取模赋值运算符,a%=b等效于a=a%b。

    Ø **=:幂赋值运算符,a**=b等效于a=a**b。

    Ø //=:取整除赋值运算符,a//=b等效于a=a//b。

    Ø :=:海象运算符,可在表达式中为变量赋值。Python3.8版本新增运算符。

    4、 python位运算符

    &:按位与运算符,如果两个相应位都为1,则该位的结果为1,否则为0。

    |:按位或运算符,只要对应的二个二进位有一个为1时,结果位就为1。

    ^:按位异或运算符,当两对应的二进位相异时,结果为1。

    ~:按位取反运算符,对数据的每个二进制位取反,即把1变为0,把0变为1。

    <<:左移动运算符,运算数的各二进位全部左移若干位,高位丢弃,低位补零。

    >>:右移动运算符,把>>左边运算数的各二进位全部右移若干位。

    5、 python逻辑运算符

    and 、 or 、not

    6、 python成员运算符

    in、not in:

    7、 python身份运算符

    is 、 not is

    8、 python运算符的优先级

    展开全文
  • javascript:指数运算符

    万次阅读 2018-05-31 15:01:18
    难得用到一次幂运算!肯定要记下来。。 var a=2**2; 2**2==Math.pow(2,2); 然后再记下,  ++ 或 -- 时,这两个运算符在操作数上的行为都被清晰定义了: ++ 或 -- 作为前缀会在其他任意运算发生之前修改...
  • 1. 算数运算符的介绍算数运算符运算符的一种,也称为数学运算符,是完成基本的算术运算使用的符号,用来处理四则运算。 + 加 10 + 20 = 30 - 减 10 - 20 = -10 * 乘 10 * 20 = 200 / 除 10 / 20 = 0.5 // 取整除.....
  • 运算运算符 注意:要做位运算,首先要把数据转换为二进制 (使用的是补码) 位运算符: &(有0则0) , | (有1则1) , ^(相同则0,不同则1) , ~(0变1,1变0) , <<(左移) , >>(右移) , >&...
  • python 布尔值 布尔运算 运算符布尔值布尔运算运算符算术运算符赋值运算符比较运算符逻辑运算符 布尔值 布尔值:Ture(真) Flase(假) 假:Flase、0、’’(空字符串)、[](空列表)、{}(空字典)、None(空值)...
  • 运算这一概念起源于数学,即通过运算法使参与运算的元素得出...Python提供了算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、身份运算符和成员运算符7类运算符,从而实现了丰富多样的运算功能。成长离...
  • python幂运算符Given two numbers a and b, we have to find a to the power b using exponential operator (**). 给定两个数a和b,我们必须找到一个与电源b。使用指数运算符(**)。 Example: 例: Input: a =...
  • “**”运算这个“**”比较简单,就是标题中的python的幂运算了 2 ** 012 ** 122 ** 1010242 ** 201048576第一操作数为底数,第二个操作数则为指数...“”运算除法运算符是“”,这个人人皆知道,但是这个二元运算符...
  • 运算运算符

    2019-08-01 16:42:51
    运算和运算符 运算:一个或者一个以上的数据经过变化得到一个新值的过程 运算符:运算的符号就是运算符 分类: 1.算术运算 ...5.** 幂运算 6.// 地板除运算符(取商运算符) 7.% 取余运算符 2比较运算...
  • “**”运算这个“**”比较简单,就是标题中的python的幂运算了 2 ** 012 ** 122 ** 1010242 ** 201048576第一操作数为底数,第二个操作数则为指数...“”运算除法运算符是“”,这个人人皆知道,但是这个二元运算符...
  • “**”运算这个“**”比较简单,就是标题中的python的幂运算了 2 ** 012 ** 122 ** 1010242 ** 201048576第一操作数为底数,第二个操作数则为指数...“”运算除法运算符是“”,这个人人皆知道,但是这个二元运算符...
  • “**”运算这个“**”比较简单,就是标题中的python的幂运算了 2 ** 012 ** 122 ** 1010242 ** 201048576第一操作数为底数,第二个操作数则为指数...“”运算除法运算符是“”,这个人人皆知道,但是这个二元运算符...
  • 运算符 算术运算符:+,-,*,/,%,++,– 赋值运算符:= 关系运算符:>,<,>=,<=,***==***(等于),!=instanceof(不等于) 逻辑运算符:&&(与),||(或),!(非) 位运算符::&...
  • “//”运算除法运算符是“/”,这个人人皆知道,但是这个二元运算符“/”求出来的结果都是取决于操作数本身的20 / 3620 /3.06.66666666666666720.0 / 36.66666666666666720.0 /3.06.666666666666667使用“/”运算符...
  • python中关于幂运算符运算顺序(3**2**3)

    万次阅读 多人点赞 2019-05-25 16:16:49
    首先先提出问题,在python3中直接print(3**2**3)会输出什么呢? print(3**2**3) 输出结果为: 6561 ...你自己计算的答案是不是729呢?...正确算法:python中幂运算符**如果是多个的话,应该先算右边...
  • 不管是啥语言都离不开加减乘除这些算法,但是在Python里面你知道这些符号代表什么运算吗?“/”这个是除法运算,那么这个“//”呢?“*”这个是乘法运算,那么这个“**”呢?下面来一一介绍下。“//”运算除法运算符...
  • 不管是啥语言都离不开加减乘除这些算法,但是在Python里面你知道这些符号代表什么运算吗?“/”这个是除法运算,那么这个“//”呢?“*”这个是乘法运算,那么这个“**”呢?下面来一一介绍下。“//”运算除法运算符...
  • 除法: 1 >>> 10/3 2 3.3333333333333335 3 >>> 10//3 4 3 5 >>>...幂运算: ...幂运算比他左侧的运算符优先级低,比右侧的优先级高 1 >>> -5 ** 2 ...
  • //一元运算符 ++ -- 自增 自减 int a=3; int b=a++;//执行前先赋值给b,在自增 int c=++a;//执行后,先自增在赋值给c //经验:就近原则,a靠近b就先赋值,++靠近c就先自增在赋值 System.out.println(a);
  • C++幂运算

    千次阅读 2020-01-11 14:51:59
    头文件#include<math.h> 使用函数pow(x,y),就可以求x的y次幂 实在忘了可以用循环for(int i = 0;i < y;i++)x * x;来进行幂运算 注:^并不是求幂运算符,而是按位异或运算符 ...
  • #(1) 算数运算符: + - * / //(地板除) %(取余) **(幂运算) var1 = 5 var2 = 8 # +res = var1 + var2 print(res) # - res = var1 - var2 print(res) # * res = var1 * var2 print(res) # ...
  • python中的运算运算符

    千次阅读 2019-07-13 11:42:36
    运算运算符 运算: 由一个以上的值经过变化得到新值得过程,就是运算运算符: 用于运算的符号,就是运算符 运算的分类: 1.算数运算 2.比较运算/关系运算 3.赋值运算 4.逻辑运算 5.位运算 6.成员运算 7.身份...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,832
精华内容 11,932
关键字:

幂运算的运算符是什么