Комплексная арифметика в Common Lisp

Узнай цену своей работы

Формулировка задачи:

Не верю своим глазам... Работаю в LispWorks:
CL-USER 1 > (defun test (x) 
    (+ (* (cos x) (cos x)) (* (sin x) (sin x)))) ;; функция должна возвращать 1...
TEST
 
CL-USER 2 > (test 1)  ;; OK
0.99999995
 
CL-USER 3 > (test 10) ;; OK
1.0
 
CL-USER 4 > (test 20) ;; OK
1.0
 
CL-USER 5 > (test #C(1 1)) ;; OK (хотя точность... ну, ладно - float)
#C(1.0000001 1.1920929E-7)
 
CL-USER 6 > (test #C(30 30)) ;; ЧТО ЭТО ?
#C(0.0 0.0)
 
CL-USER 7 > (test #C(10 10))  ;; А ЭТО ?
#C(20.0 0.0)
 
CL-USER 8 > (test #C(0.5 -0.8)) ;; ОК
#C(1.0000002 -5.9604646E-8)
Что происходит?

Решение задачи: «Комплексная арифметика в Common Lisp»

textual
Листинг программы
x:=30+30*I;
> evalf(sin(x)^2,30);
> evalf(cos(x)^2,30);
> evalf(sin(x)^2+cos(x)^2,30);
 
                            x := 30 + 30 I
 
 
                                     26
  0.271915665447622268381856029215 10   -
 
                                           25
        0.870239954482600088075880628745 10   I
 
 
                                      26
  -0.271915665447622268381856019215 10   +
 
                                           25
        0.870239954482600088075880628744 10   I
 
 
                          1.0000 - 0.00001 I

Объяснение кода листинга программы

В этом коде выполняются вычисления с комплексными числами в Common Lisp. Вот список номеров и названий переменных и их значений:

  1. x := 30 + 30 I — это присваивание переменной x значение 30 + 30 I (комплексное число)
  2. evalf(sin(x)^2,30) — это вызов функции evalf с аргументом sin(x)^2 и указанием точности вычисления 30. Функция sin(x) возвращает синус комплексного числа x, а ^2 означает возведение в квадрат. В данном случае, результат вычисления будет вещественным числом.

  3. evalf(cos(x)^2,30) — это вызов функции evalf с аргументом cos(x)^2 и указанием точности вычисления 30. Функция cos(x) возвращает косинус комплексного числа x, а ^2 означает возведение в квадрат. В данном случае, результат вычисления будет вещественным числом.

  4. evalf(sin(x)^2+cos(x)^2,30) — это вызов функции evalf с аргументом sin(x)^2+cos(x)^2 и указанием точности вычисления 30. В данном случае, результат вычисления будет вещественным числом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5