(define (make-complex a b) (cons a b))
(define (real x) (car x))
(define (imag x) (cdr x))
(define (complex-sqrt x)
(define (first a b) (sqrt (/ (+ a
(sqrt (+
(* a a)
(* b b))))
2)))
(define (second a b) (sqrt (/ (+ (* -1 a)
(sqrt (+
(* a a)
(* b b))))
2)))
(cons (first (real x) (imag x)) (second (real x) (imag x))))
(complex-sqrt (make-complex 2 0))
(complex-sqrt (make-complex -3 0))
因此,对于某些上下文,此函数会查找复数的平方根。 a是复数的实部,b是虚部。复数sqrt函数不适用于某些b = 0的值,但我不确定为什么。我尝试了几个值,其中b等于0并将它们放入我的计算器,但它们都给了我相同的答案。
谢谢
答案 0 :(得分:0)
由于
的平方,实施的公式对于否定b
是错误的
sqrt( (sqrt(a*a+b*b)+a)/2 ) +i*sqrt( (sqrt(a*a+b*b)-a)/2 )
是
a + i*sqrt( (a*a+b*b) - a*a) = a + i*abs(b)
然后不是原始号码。
对于b=0
,术语sqrt(a*a)
可能会产生一个略小于abs(a)
的数字,因此实部和虚部之一在外部平方根下面具有负表达式。