АнглийскийФранцузскийИспанский

Ad


Значок OnWorks

funcalc - Интернет в облаке

Запустите funcalc в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда funcalc, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


funcalc - калькулятор Funtools (для бинарных таблиц)

СИНТАКСИС


Funcalc [-n] [-a argstr] [-e expr] [-f файл] [-l ссылка] [-p prog] [имя [столбцы]]

ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ


-a argstr # аргументы пользователя для передачи скомпилированной программе
-e expr # выражение funcalc
-f file # файл, содержащий выражение funcalc
-l libs # библиотеки для добавления в команду ссылки
-n # выводить сгенерированный код вместо компиляции и выполнения
-p prog # генерировать именованную программу, без выполнения
-u # умереть, если какая-либо переменная не объявлена ​​(не объявлять автоматически)

ОПИСАНИЕ


Funcalc это программа-калькулятор, которая позволяет строить произвольные выражения,
компилируется и выполняется для столбцов в таблице Funtools (двоичная таблица FITS или необработанное событие
файл). Он работает путем интеграции пользовательских выражений в шаблонную программу C, а затем
компиляция и выполнение программы. Funcalc выражения являются операторами C, хотя некоторые
поддерживаются важные упрощения (такие как автоматическое объявление переменных).

Funcalc выражения можно указать тремя способами: в командной строке с помощью -e
[Выражение] переключатель в файле с помощью -f [файл] переключатель, или из стандартного ввода (если ни один -e
ни -f указано). Конечно файл, содержащий Funcalc выражения можно прочитать из
стандартный ввод.

Каждый призыв Funcalc требует, чтобы входной файл таблицы Funtools был указан как
первый аргумент командной строки. Выходной файл таблицы Funtools является вторым необязательным
аргумент. Это необходимо только в том случае, если создается выходной файл FITS (т. Е. В тех случаях, когда
домен Funcalc выражение выводит только значения, выходной файл не требуется). Если ввод и вывод
файла указаны оба, третий необязательный аргумент может указать список столбцов для
активировать (используя FunColumnActivate ()). Обратите внимание, что Funcalc определяет, следует ли
сгенерировать код для записи выходного файла на основе наличия или отсутствия вывода
аргумент файла.

A Funcalc выражение выполняется в каждой строке таблицы и состоит из одного или нескольких C
операторы, которые работают со столбцами этой строки (возможно, с использованием временных переменных).
В выражении делается ссылка на столбец текущий row, используя структуру C
синтаксис В настоя-[colname]>, например, cur-> x, cur-> pha и т. д. Можно определить локальные скалярные переменные.
используя объявления C в самом начале выражения, иначе они могут быть определены
автоматически Funcalc (быть двойным). Таким образом, например, замена столбцов x
и y в таблице может быть выполнено с использованием любого из следующих эквивалентов Funcalc
выражения:

двойная температура;
temp = cur-> x;
cur-> x = cur-> y;
cur-> y = temp;

или:

temp = cur-> x;
cur-> x = cur-> y;
cur-> y = temp;

Когда это выражение выполняется с помощью такой команды, как:

funcalc -f swap.expr itest.ev otest.ev

в результирующем файле поменялись местами значения столбцов x и y.

По умолчанию тип данных переменной для столбца такой же, как тип данных
столбец, как хранится в файле. Это можно изменить, добавив ": [dtype]" к первому
ссылка на этот столбец. В приведенном выше примере, чтобы заставить x и y выводиться как двойные,
явно укажите тип 'D':

temp = cur-> x: D;
cur-> x = cur-> y: D;
cur-> y = temp;

Спецификаторы типа данных следуют стандартному синтаксису таблицы FITS для определения столбцов с помощью TFORM:

· A: символы ASCII

· B: 8-битный символ без знака

· I: 16-битное целое со знаком

· U: 16-битное целое без знака (не стандартное FITS)

· J: 32-битное целое число со знаком

· V: 32-битное целое без знака (не стандартное FITS)

· E: 32-битное число с плавающей запятой

· D: 64-битное число с плавающей запятой

· X: биты (обрабатываются как массив символов)

Обратите внимание, что только первая ссылка на столбец должна содержать явный тип данных.
спецификатор.

Конечно, важно правильно обрабатывать тип данных столбцов. Один из
наиболее частая причина ошибки в Funcalc программирование - это неявное использование неправильных данных
тип столбца в выражении. Например, расчет:

dx = (cur-> x - cur-> y) / (cur-> x + cur-> y);

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

dx = (cur-> x: D - cur-> y: D) / (cur-> x + cur-> y);

В качестве альтернативы это можно сделать, используя приведение типов C в выражении:

dx = ((double) cur-> x - (double) cur-> y) / (((двойной) cur-> x + (double) cur-> y);

Помимо доступа к столбцам в текущей строке, также можно указать
предыдущий строка с использованием пред-[colname]> и в следующий строка с использованием следующий-[colname]>. Обратите внимание, что
if пред-[colname]> указывается в Funcalc выражение, самая первая строка не
обработанный. Если следующий-[colname]> указывается в Funcalc выражение, самая последняя строка
не обрабатывается. Этим способом, Предыдущая и следующий гарантированно всегда указывают на действительные строки.
Например, чтобы распечатать значения текущего столбца x и предыдущего столбца y,
используйте функцию C fprintf в Funcalc выражение:

fprintf (stdout, "% d% d \ n", cur-> x, prev-> y);

Новые столбцы можно указать с помощью того же В настоя-[colname]> синтаксис, добавив столбец
type (и необязательные спецификаторы tlmin / tlmax / binsiz), разделенные двоеточиями. Например,
cur-> avg: D определит новый столбец типа double. Спецификаторы типа такие же, как у
использованный выше, чтобы указать новые типы данных для существующих столбцов.

Например, чтобы создать и вывести новый столбец, который представляет собой среднее значение x и y
columns, можно определить новый столбец "avg":

cur-> avg: D = (текущий-> x + cur-> y) /2.0

Обратите внимание, что последний ";" не требуется для однострочных выражений.

Как и в случае спецификации типа данных FITS TFORM, спецификатору типа данных столбца может предшествовать
числовым счетом для определения массива, например, «10I» означает вектор из 10 коротких целых чисел, «2E»
означает два числа с плавающей запятой одинарной точности и т. д. Новый столбец нужно определить только один раз в
Funcalc выражение, после которого его можно использовать без повторного указания типа. Этот
включает ссылку на элементы массива столбцов:

cur-> avg [0]: 2D = (cur-> x + cur-> y) /2.0;
cur-> avg [1] = (cur-> x - cur-> y) /2.0;

Тип данных 'X' (биты) обрабатывается как массив символов измерения (numeric_count / 8), т. Е.
16X обрабатывается как 2-байтовый массив символов. Доступ к каждому 8-битному элементу массива осуществляется отдельно:

cur-> stat [0]: 16X = 1;
cur-> stat [1] = 2;

Здесь создается 16-битный столбец, в котором для MSB установлено значение 1, а для LSB установлено значение 2.

По умолчанию все обработанные строки записываются в указанный выходной файл. Если хотите
пропустить запись определенных строк, просто выполните оператор C "continue" в конце
Funcalc выражение, так как запись строки выполняется сразу после
выражение выполнено. Например, чтобы пропустить запись строк, среднее значение которых совпадает с
текущее значение x:

cur-> avg [0]: 2D = (cur-> x + cur-> y) /2.0;
cur-> avg [1] = (cur-> x - cur-> y) /2.0;
если (cur-> avg [0] == cur-> x)
Продолжать;

Если аргумент выходного файла не указан в Funcalc командная строка, выходной файл не
открыт, и строки не записываются. Это полезно в выражениях, которые просто выводят выходные данные
результаты вместо создания нового файла:

fpv = (cur->av3:D-cur->av1:D)/(cur->av1+cur->av2:D+cur->av3);
fbv = cur-> av2 / (cur-> av1 + cur-> av2 + cur-> av3);
fpu = ((double)cur->au3-cur->au1)/((double)cur->au1+cur->au2+cur->au3);
fbu = cur-> au2 / (двойной) (cur-> au1 + cur-> au2 + cur-> au3);
fprintf (stdout, "% f \ t% f \ t% f \ t% f \ n", fpv, fbv, fpu, fbu);

В приведенном выше примере мы используем как явную спецификацию типа (для столбцов "av"), так и тип
приведение (для столбцов "au"), чтобы гарантировать, что все операции выполняются в двойном
точность.

Если указан выходной файл, выбранная входная таблица обрабатывается и выходные строки
копируются в выходной файл. Обратите внимание, что выходной файл может быть указан как "stdout" в
чтобы записать выходные строки в стандартный вывод. Если аргумент выходного файла -
передается, можно также передать необязательный третий аргумент, чтобы указать, какие столбцы следует обрабатывать.

В двоичной таблице FITS иногда желательно скопировать все другие расширения FITS.
в выходной файл. Это можно сделать, добавив знак "+" к имени
расширение в имени входного файла. Видеть несостоятельный для связанного примера.

Funcalc работает, интегрируя указанное пользователем выражение в шаблонную программу C
называется tabcalc.c. Завершенная программа затем компилируется и выполняется. Переменная
декларации, с которых начинается Funcalc выражения помещаются в раздел локальных объявлений
основной программы шаблона. Все остальные строки размещаются в главном окне программы шаблона.
внутренний цикл обработки. Остальные детали создания программы обрабатываются автоматически. За
Например, спецификаторы столбца анализируются для построения структуры C для обработки строк, которая
перешел к FunColumnSelect () и используется в FunTableRowGet (). Если используется неизвестная переменная
в выражении, что приводит к ошибке компиляции, построение программы повторяется после
определение неизвестной переменной типа double.

Как правило, Funcalc код выражения добавлен к Funcalc цикл обработки строк. Это возможно
добавить код в другие части программы, поместив этот код в специальные директивы
формы:

[название директивы]
... здесь идет код ...
конец

Директивы:

· Глобальный добавить код и объявления в глобальное пространство перед основной подпрограммой.

· локальным добавить объявления (и код) сразу после локальных объявлений в главном

· до добавить код непосредственно перед входом в основной цикл обработки строк

· после добавить код сразу после выхода из основного цикла обработки строк

Таким образом, следующие Funcalc выражение объявит глобальные переменные и сделает подпрограмму
вызывает непосредственно перед и сразу после основного цикла обработки:

Глобальный
двойной v1, v2;
двойной инициализации (void);
двойная отделка (двойной v);
конец
до
v1 = init ();
конец
... обрабатывать строки с вычислениями с использованием v1 ...
после
v2 = конец (v1);
if (v2 <0.0) {
fprintf (stderr, "Ошибка обработки% g ->% g \ n", v1, v2);
выход(1);
}
конец

Такие процедуры, как в этом() и финиш() выше передаются в созданную программу для связывания
используя -l [ссылка на сайт Директивы ...] выключатель. Строка, указанная этим переключателем, будет
добавлен в строку ссылки, используемую для сборки программы (перед библиотекой funtools). За
пример, предполагая, что в этом() и финиш() находятся в библиотеке libmysubs.a в
Каталог / opt / special / lib, используйте:

funcalc -l "-L / opt / special / lib -lmysubs" ...

Пользовательские аргументы могут быть переданы скомпилированной программе funcalc, используя строковый аргумент для
"-переключатель. Строка должна содержать все аргументы пользователя. Например, передать
целые числа 1 и 2 используйте:

funcalc -a "1 2" ...

Аргументы хранятся во внутреннем массиве и доступны в виде строк через ARGV (n)
макрос. Например, рассмотрим следующее выражение:

локальным
инт рмин, рмакс;
конец

до
pmin = atoi (АРГВ(0));
pmax = atoi (АРГВ(1));
конец

если ((cur-> pha> = pmin) && (cur-> pha <= pmax))
fprintf (stderr, "% d% d% d \ n", cur-> x, cur-> y, cur-> pha);

Это выражение распечатает значения x, y и pha для всех строк, в которых значение pha равно
между двумя значениями, вводимыми пользователем:

funcalc -a '1 12' -f foo snr.ev '[cir 512 512 .1]'
512 512 6
512 512 8
512 512 5
512 512 5
512 512 8

funcalc -a '5 6' -f foo snr.ev '[cir 512 512 .1]'
512 512 6
512 512 5
512 512 5

Обратите внимание, что ответственность за правильное количество аргументов лежит на пользователе.
пройдены. Макрос ARGV (n) возвращает NULL, если запрошенный аргумент выходит за пределы.
от фактического количества аргументов, обычно приводящих к SEGV, если они обрабатываются вслепую. Проверять
количество аргументов, используйте макрос ARGC:

локальным
long int seed = 1;
двойной лимит = 0.8;
конец

до
если (ARGC> = 1) seed = atol (АРГВ(0));
если (ARGC> = 2) limit = atof (АРГВ(1));
srand48 (семя);
конец

if (drand48 ()> limit) продолжить;

Макрос WRITE_ROW расширяется до FunTableRowPut () вызов, записывающий текущую строку. Это
можно использовать для записи строки более одного раза. Кроме того, макрос NROW расширяется до
номер строки, обрабатываемой в данный момент. Использование этих двух макросов показано ниже.
пример:

if (cur-> pha: I == cur-> pi: I) continue;
а = cur-> pha;
cur-> pha = cur-> pi;
cur-> pi = a;
cur-> AVG: E = (cur-> pha + cur-> pi) /2.0;
cur-> NR: I = NROW;
если (NROW <10) WRITE_ROW;

Если же линия индикатора -p [прога] указан переключатель, выражение не выполняется. Скорее
сгенерированный исполняемый файл сохраняется с указанным именем программы для дальнейшего использования.

Если же линия индикатора -n указан переключатель, выражение не выполняется. Скорее сгенерированный код
записывается в стандартный вывод. Это особенно полезно, если вы хотите создать файл скелета.
и добавьте свой код, или если вам нужно проверить ошибки компиляции. Обратите внимание, что комментарий
в начале вывода дает команду компилятора, необходимую для построения программы на этом
Платформа. (Команда может меняться от платформы к платформе из-за использования
разные библиотеки, переключатели компилятора и т. д.)

Как упоминалось ранее, Funcalc объявит скалярную переменную автоматически (как
double), если эта переменная была использована, но не объявлена. Этот объект реализован
используя сценарий sed с именем funcalc.sed, который обрабатывает вывод компилятора для определения
необъявленная ошибка переменной. Этот сценарий был засеян с соответствующей ошибкой
информация для gcc и для cc на платформах Solaris, DecAlpha и SGI. Если ты найдешь это
автоматическое объявление скаляров не работает на вашей платформе, проверьте этот сценарий sed;
может потребоваться добавить или отредактировать некоторые сообщения об ошибках, которые он обнаруживает.

Чтобы сохранить лексический анализ Funcalc выражения (разумно) простые, мы выбрали
принять некоторые ограничения на то, насколько точно C-комментарии, пробелы и новые строки размещаются
в сгенерированной программе. В частности, комментарии, связанные с объявленными локальными переменными
в начале выражения (т.е. не в местный ... конец блок) обычно заканчивается
во внутреннем цикле, а не в локальных объявлениях:

/ * этот комментарий окажется не в том месте (т.е. во внутреннем цикле) * /
двойной а; / * тоже не в том месте * /
/ * это будет в нужном месте (внутренний цикл) * /
if (cur-> x: D == cur-> y: D) продолжить; / * тоже в нужном месте * /
а = cur-> x;
cur-> x = cur-> y;
cur-> y = a;
cur-> avg: E = (cur-> x + cur-> y) /2.0;

Точно так же пробелы и новые строки иногда опускаются или добавляются в, казалось бы, произвольном
манера. Конечно, ни один из этих стилистических недостатков не влияет на правильность
сгенерированный код.

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

Наряду с комментариями C, Funcalc выражения могут иметь однострочные внутренние комментарии, которые
не передается в созданную программу C. Эти внутренние комментарии начинаются с #
символ и продолжайте до новой строки:

двойной а; # это не передается в сгенерированный файл C
# и это не
а = cur-> x;
cur-> x = cur-> y;
cur-> y = a;
/ * этот комментарий передается в файл C * /
cur-> avg: E = (cur-> x + cur-> y) /2.0;

Как упоминалось ранее, входные столбцы обычно идентифицируются по их использованию в
внутренний цикл событий. В редких случаях вы можете захотеть прочитать столбец и
обрабатывать его вне основного цикла. Например, qsort может использовать столбец при сортировке
процедура сравнения, которая не обрабатывается во внутреннем цикле (и, следовательно, не
неявно указан как столбец для чтения). Чтобы убедиться, что такой столбец читается
цикл событий, используйте явный ключевое слово. Аргументы этого ключевого слова определяют столбцы, которые
должны быть прочитаны во входной структуре записи, даже если они не упоминаются в
внутренний цикл. Например:

явная пифа

обеспечит чтение столбцов pi и pha для каждой строки, даже если они не
обрабатывается во внутреннем цикле событий. В явный заявление можно разместить где угодно.

Наконец, обратите внимание, что Funcalc в настоящее время работает с выражениями, включающими двоичные таблицы FITS и
необработанные файлы событий. Мы рассмотрим возможность добавления поддержки для выражений изображений позже,
если есть потребность в такой поддержке со стороны сообщества.

Используйте funcalc онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    NSIS: система установки со сценариями Nullsoft
    NSIS: система установки со сценариями Nullsoft
    NSIS (установка с поддержкой сценариев Nullsoft)
    System) является профессиональным открытым исходным кодом
    система для создания установщиков Windows. Это
    спроектирован таким образом, чтобы быть таким же маленьким и гибким
    как возможно ...
    Скачать NSIS: система установки Nullsoft со сценариями
  • 2
    авторизация
    авторизация
    AuthPass - это пароль с открытым исходным кодом
    менеджер с поддержкой популярных и
    проверенный Keepass (kdbx 3.x И kdbx 4.x ...
    Скачать авторизацию
  • 3
    Zabbix
    Zabbix
    Zabbix — это открытый корпоративный класс.
    исходное распределенное решение для мониторинга
    предназначен для наблюдения и отслеживания
    производительность и доступность сети
    серверы, устройства...
    Скачать Zabbix
  • 4
    KDiff3
    KDiff3
    Этот репозиторий больше не поддерживается
    и хранится в архивных целях. Видеть
    https://invent.kde.org/sdk/kdiff3 for
    новейший код и
    https://download.kde.o...
    Скачать KDiff3
  • 5
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX — это графический интерфейс для
    USB-загрузчик Ванинкоко, основанный на
    libwiigui. Он позволяет перечислять и
    запуск игр Wii, игр Gamecube и
    доморощенный на Wii и WiiU...
    Скачать USBLoaderGX
  • 6
    Жар-птица
    Жар-птица
    СУБД Firebird предлагает функции ANSI SQL
    & работает на Linux, Windows и
    несколько Unix-платформ. Функции
    отличный параллелизм и производительность
    & сила...
    Скачать Firebird
  • Больше »

Команды Linux

Ad