Могу ли я сделать арифметику с комплексными числами в awk, и если да, то как?

Поддерживает ли язык AWK арифметику для сложных чисел? Если да, как определить мнимую единицу?

2 Solutions collect form web for “Могу ли я сделать арифметику с комплексными числами в awk, и если да, то как?”

Вы всегда можете определить комплексные числа как массив из двух чисел (действительную и мнимую часть). Вам нужно будет определить все операторы арифметики вручную:

 function cset(x, real, imaginary) { x["real"] = real x["imaginary"] = imaginary } function cadd(n1, n2, result) { result["real"] = n1["real"] + n2["real"] result["imaginary"] = n1["imaginary"] + n2["imaginary"] } function cmult(n1, n2, result) { result["real"] = n1["real"] * n2["real"] - n1["imaginary"] * n2["imaginary"] result["imaginary"] = n1["real"] * n2["imaginary"] + n2["real"] * n1["imaginary"] } function c2a(x, tmp) { if (x["real"]) { tmp = x["real"] if (x["imaginary"] > 0) tmp = tmp "+" } if (x["imaginary"]) { if (x["imaginary"] == -1) tmp = tmp "-i" else if (x["imaginary"] == 1) tmp = tmp "i" else tmp = tmp x["imaginary"] "i" } if (tmp == "") tmp = "0" return "(" tmp ")" } BEGIN { cset(i, 0, 1) cmult(i, i, i2) printf "%s * %s = %s\n", c2a(i), c2a(i), c2a(i2) cset(x, 1, 2) cset(y, 0, 4) cadd(x, y, xy) printf "%s + %s = %s\n", c2a(x), c2a(y), c2a(xy) } 

Что будет выводить:

 (i) * (i) = (-1) (1+2i) + (4i) = (1+6i) 

Для языков с встроенной поддержкой комплексных чисел см.

  • python :

     $ python -c 'print(1j*1j)' (-1+0j) 
  • octave :

     $ octave --eval 'i*i' ans = -1 
  • calc (пакет apcalc на Debian):

     $ calc '1i * 1i' -1 
  • R :

     $ $ Rscript -e '1i*1i' [1] -1+0i 

Нет, awk в настоящее время не поддерживает сложные номера изначально.

Я укажу на спецификацию POSIX для awk, где он говорит:

Каждое выражение должно иметь либо строковое значение, либо числовое значение, либо и то, и другое. За исключением случаев, указанных в конкретных контекстах, значение выражения должно быть неявно преобразовано в тип, необходимый для контекста, в котором он используется. Строковое значение должно быть преобразовано в числовое значение либо эквивалентом следующих вызовов функциям, определенным стандартом ISO C:

setlocale (LC_NUMERIC, "");

numeric_value = atof (string_value);

или путем преобразования начальной части строки для двойного представления типа …

а также

В случае (a) числовое значение числовой строки должно быть значением, которое будет возвращено вызовом strtod () …

… и указывая, что atof и strtod возвращают тип double .

  • linux / solaris + проверить дублирующий действительный IP-адрес из файла
  • Использование awk для обработки вывода ls с пробелами в именах файлов / пути
  • Многострочный (в одном абзаце) шаблон заменить использование awk или sed
  • Передача списка из двух PID для xargs только убивает первый, используя ssh
  • Можно ли добавлять последовательные столбцы в AWK
  • Как использовать команду awk для вычисления разницы дат между двумя столбцами в одном файле?
  • Grep / awk для нескольких файлов для одного вывода
  • Vim - как увеличить число в визуальном блоке?
  • Необходимо отфильтровать данные на основе двух столбцов, имеющих много отношений, используя awk
  • Вычитание одной текстовой строки из другой, оставляя уникальные символы, возможно, используя awk
  • Заменить значения на основе соответствия переменной ID
  • Interesting Posts

    блокировать конкретного пользователя для отправки почты

    Жесткий диск USB не будет перезагружаться после отключения питания

    Начиная с обновления с OpenSuse 42.1 до 42.2, raid5 повторяет синхронизацию при каждой перезагрузке

    Процессор является бесплатным, но скрипт bash не использует все ресурсы ЦП

    Заменить новые разрешения на файлы после rsync из семенной коробки

    Почему я не могу связать свое доменное имя и vps_ip?

    Вложенные циклы, если условия и фоновые задания в bash

    Как написать скрипт для запуска, только если другой скрипт запущен совсем недавно?

    Как удалить файл лицензии, когда debian-упаковка с использованием автозапуска automake?

    Пользователь vsftp загружает файлы в перемещенную папку за пределами разрешенной папки

    Графика нечеткая в Ubuntu 12.10

    Как сгенерировать список файлов конфигурации, к которым обращается инструмент (например, bash или vi)?

    Имя пользователя не находится в файле sudoers. Этот инцидент будет сообщен

    Возможно ли повторное использование оболочки?

    Как узнать, сколько времени требуется для выполнения ежедневной работы updatedb?

    Linux и Unix - лучшая ОС в мире.