挣扎起飞 发表于 2021-1-24 00:36:23

一个难以让人很困惑的错误,不知道是哪里除了问题

class __A__():
        def equal(x):
                equal = x**2**0.5
                return equal
输出结果__A__.equal(-100)
         (-179.35994199180593-649.3221921940507j)
简单改一下
class __A__():
        def equal(x):
                equal = (x**2)**0.5
                return equal

       
>>> __A__.equal(-100)
100.0
结果又变为正确,说明函数本身没有出问题,但是中间的运行过程跟我想象的有些不太一样
好像运算的优先级跟四则运算不同,但是我调整了一下
>>> -100**2**0.5
-673.638848395037
直接输入的时候又是另外一个结果,三个结果,竟然完全不同,我搞蒙了,到底是哪里出问题了?

wp231957 发表于 2021-1-24 07:25:02

虽然它是有默认顺序的,但是最好还是加括号为好

qq1151985918 发表于 2021-1-24 07:46:32

本帖最后由 qq1151985918 于 2021-1-24 07:51 编辑

第一点,幂运算优先级要远远高于取负优先级,所以-100**2**0.5其实是-(100**2**0.5)你函数中的return表达式其实是(-100)**2**0.5因为函数中的x直接就是负数整体
第二点,python中的幂运算是右结合,也就是有多个幂运算,右边的幂优先级较高,所以-100**2**0.5其实是-(100**(2**0.5))

天下有雪 发表于 2021-1-24 11:30:06

学习了,右结合的运算符,加上括号才稳当。

挣扎起飞 发表于 2021-1-24 23:36:04

qq1151985918 发表于 2021-1-24 07:46
第一点,幂运算优先级要远远高于取负优先级,所以其实是你函数中的return表达式其实是因为函数中的x直接就 ...

(-179.35994199180593-649.3221921940507j)
那这个结果呢?我主要不明白这个结果是怎么出来的,好像是复数?

qq1151985918 发表于 2021-1-25 01:16:56

(-100)**2**0.5 == (-100)**(2**0.5)啊,上边说的还不够清楚么,再理解理解

永恒的蓝色梦想 发表于 2021-1-25 09:49:27

一个难以让人很困惑的错误这真的没打错?

英雄菜刀 发表于 2021-1-25 10:17:19

挣扎起飞 发表于 2021-1-24 23:36
(-179.35994199180593-649.3221921940507j)
那这个结果呢?我主要不明白这个结果是怎么出来的,好像是复 ...

你是不是以为2**0.5=1了……

星空玩偶,夜云 发表于 2021-1-25 12:24:32

困惑终于揭开了........

挣扎起飞 发表于 2021-1-25 12:44:49

qq1151985918 发表于 2021-1-25 01:16
(-100)**2**0.5 == (-100)**(2**0.5)啊,上边说的还不够清楚么,再理解理解

一时间没转过弯儿,我明白了,谢谢{:5_109:}
页: [1]
查看完整版本: 一个难以让人很困惑的错误,不知道是哪里除了问题