Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176

Нужна функция Sign без проверки условий

09.07.2015, 15:11. Показов 4087. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пока не нашёл способа, но ищу.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2015, 15:11
Ответы с готовыми решениями:

Вычислить Z=(sign(x)+sign(y))∙sign(x+y), где -функция определения знака числа, принимающая значение 1, если число а- положительное; -1, если число
Вычислить Z=(sign(x)+sign(y))∙sign(x+y), где -функция определения знака числа, принимающая значение 1, если число а- положительное; -1,...

Нужна функция с ветвлением условий
printf("Вам необходимо больше одного саженца?\n"); char choice; scanf("%s", &choice); if (choice == "Да"){ ...

Описать функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие значения и найти значения выражения Sign(A) + Sign(B)
Описать функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие значения: -1, если Х<0; 0,...

40
 Аватар для OldFedor
7486 / 4150 / 474
Регистрация: 25.08.2012
Сообщений: 11,530
Записей в блоге: 11
09.07.2015, 15:13
В каком контексте?
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
09.07.2015, 15:55  [ТС]
Ну например вот:
ноль просто вычисляется: число+число/число, идём в первый массив процедур в ячейку по результату выражения , в ячейке ноль процедура возвращающая ноль, в ячейке 2 процедура делающая дальнейшую обработку.
на том форуме просто консультант бесплатный по ФИПСу, у меня заявка по механике, там обитаю ещё.

Добавлено через 8 минут
Ну там правда форум попрашайки портят и прочие неадекваты, а так библиотека ФИПСа - сайт.

Добавлено через 24 минуты
Делить на 0 нельзя, забыл. Что-то другое надо, но быстрое. Ноль всё портит.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,874
09.07.2015, 17:18
C#
1
2
3
4
int sign(int x)
{
    return  (x >> 31) | (int)((uint)-x >> 31);
}
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.07.2015, 02:40
Shamil1, зачем такие сложности? Тем более что результат будет положительный для все отличных от нуля значений. Для маскируем знаковый бит в зависимости от разрядности и эндианства. Этого хватит.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,874
10.07.2015, 08:09
Цитата Сообщение от castorsky Посмотреть сообщение
зачем такие сложности?
Разве это сложности? Всего три операции.
(int) и (uint) - это не операции, а указания для компилятора.

Цитата Сообщение от castorsky Посмотреть сообщение
маскируем знаковый бит в зависимости от
Не понял, как.
Знаковый бит одинаков для нуля и положительных чисел.
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.07.2015, 13:27

Не по теме:

значит нуль - положительное xD


И вправду так. Но вдеь область значений sign {-1; 0; 1}. Придется усложнить
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int
nul (int x) {
    return 0;
}
 
int
sgn (int x) {
    return (x >> 31) | 1;
}
 
int
sign (int x) {
    static int (*a[2])(int) = {nul, sgn};
 
    return a[(x >> 31 | -x >> 31) & 1](x);
}
1
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
10.07.2015, 15:37  [ТС]
А вот так я определю ноль, в остальных случаях нужно высчитывать минус или плюс. Это можно.
Вот мне подсказали как обработчик ошибок задействовать, для определения нуля
Pascal
1
2
3
4
5
6
7
8
function f(x : real) : real;
begin
  try
    Result := (x + x) / x;
  except
    Result := 0;
  end;
end;
Сделать массив процедур, где в второй ячейке дальнейшие расчёты. Годно? Я понимаю что кривовато, но мне нравится код без проверки условий.

Добавлено через 4 минуты
castorsky, можете пояснить код, а то я на c не понимаю?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.07.2015, 15:44
Цитата Сообщение от Hretgir Посмотреть сообщение
Годно?
годно так
C
1
2
3
int sign (int n) {
  return n < 0 ? -1 : n > 0 ? 1 : 0;
}
а то, что Вы пытаетесь - ребячество. Я было подумал что Вам такое условие преподаватель поставил.

Добавлено через 6 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int
/* функция константа. Нужна для только для полноты кратины в sign */
nul (int x) {
    return 0;
}
 
/* возвращает -1 или 1 в зависимости от знака */
int
sgn (int x) {
    return (x >> 31) | 1;
}
 
int
sign (int x) {
    /* массив функций.  */
    static int (*a[2])(int) = {nul, sgn};
 
    return a[(x >> 31 | -x >> 31) /* тут будет либо 0, либо 1. Индекс той функции в массиве, которая нам нужна */ ] (x);
}
/*
>>, << - арифметический сдвиг вправо и влево соответственно
| - поразрадное ИЛИ
*/
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
10.07.2015, 15:50  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
годно так
но это ведь проверка условий... так?

Добавлено через 49 секунд
Цитата Сообщение от castorsky Посмотреть сообщение
Я было подумал что Вам такое условие преподаватель поставил.
нет, я просто так осваиваю программирование.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.07.2015, 15:51
Цитата Сообщение от Hretgir Посмотреть сообщение
но это ведь проверка условий... так?
так
1
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
10.07.2015, 15:55  [ТС]
Не, я по другому программировать буду, у меня в программе и так не было ни одной проверки условий, просто мне рассказали как работает функция Sign, вот я и хочу переписать, мне хочется чтобы в моём коде не было ни одной проверки условий.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.07.2015, 15:57
Понятно, но циклы - тоже условия. Может brainfuck подойдет?
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
10.07.2015, 16:00  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
Понятно, но циклы - тоже условия.
то другие условия, по структуре цикл работает как механизм, т.е - явной проверки условий нет, она есть как-бы, но в логике программы отслеживается механизм, а не условность.
Цитата Сообщение от castorsky Посмотреть сообщение
Может brainfuck подойдет?
не слышал...не читал...
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.07.2015, 16:03
Как при явном условии, так и при условии выхода из цикла машкод будет содержать одни и те же jmp'ы. Так что если хотите идти до конца, то придется отказаться и от циклов.
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
10.07.2015, 16:12  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
Как при явном условии, так и при условии выхода из цикла машкод будет содержать одни и те же jmp'ы. Так что если хотите идти до конца, то придется отказаться и от циклов.
Дело не в принципе, может кто-то и считает меня за идиота, но я пишу код без проверки условий не для красоты или понтов, , однажды, я буду учить программу писать код , поэтому все программы которые я пишу - без явной проверки условий, чтобы код был похож на конвеер, это тренирует мой ум, я смотрю на код иначе чем другие, а то что кто-то там хихикает, питая надежду мол типа я верю в исключительность кода - его проблемы. По крайней мере я прошлым летом разработал ещё механизм элементарного предположения, и на спор определил абстрактное мышление как механизм. У меня свои причуды , только некоторым они не понятны, а поэтому смешны .

Добавлено через 2 минуты
А так пусть веселятся - мне мешать не будут, будут удивлены. Это просто практично- описывать машине машину, а не свои измышлизмы.
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.07.2015, 16:47
Я бы еще отметил что это решение подходит только для целых чисел. А если циклы можно то не сложно и для foating point сделать. Я не сказал бы что мы тут избавились от условий.
C
1
2
3
4
5
6
7
8
int
sign (float n) {
    while (n < 0)
        return -1;
    while (n == 0)
        return 0;
    return 1;
}
1
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
10.07.2015, 17:06  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
Я не сказал бы что мы тут избавились от условий.
Это не существенно, циклы выглядят как механизм. Я тоже пользуюсь разными циклами, чтобы обойти "если".

Добавлено через 9 минут
Цитата Сообщение от castorsky Посмотреть сообщение
А если циклы можно то не сложно и для foating point сделать. Я не сказал бы что мы тут избавились от условий.
Действительно, спасибо, я почему-то мудрил другое. Мне понравилась идея использовать обработчик ошибок, для определения нуля. Да, там далее прибавить к результату 4 и массив процедур с четырёх ячеек. Циклы вроде попрактичнее выглядят всё-равно, так и сделаю, странно что я раньше так делал в коде, а для функции Sign искал другое решение.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,874
10.07.2015, 17:37
Цитата Сообщение от Hretgir Посмотреть сообщение
Вот мне подсказали как обработчик ошибок задействовать, для определения нуля
Обработчик ошибок - это очень дорого по ресурсам. Представляете, сколько делается работы, чтобы собрать всю информацию об ошибке, включая стек вызовов.

Добавлено через 6 минут
Любую конструкцию с if можно заменить на комбинацию while + break.
И, по моему мнению, при использовании такой конструкции код перестаёт быть похожим на конвейер.
1
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
11.07.2015, 15:27  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Любую конструкцию с if можно заменить на комбинацию while + break.
да, есть у меня такое
Цитата Сообщение от Shamil1 Посмотреть сообщение
И, по моему мнению, при использовании такой конструкции код перестаёт быть похожим на конвейер.
нет, не перестает, конвеер - механизм, когда стрелка часов показывает ровно какой-либо час, то это не значит, что в часах были проверено условие - "стоит-ли минутная на 12-и", на самом деле ряд этих условий никем проверен не был - он был выполнен, этот ряд, просто в некоторых местах 0 раз. Вот что такое -"конвеер".

Добавлено через 17 минут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2015, 15:27
Помогаю со студенческими работами здесь

Функция проверки числа на деление без остатка на другое число
Привет! Как организовать проверку числа на то делится ли оно без остатка или нет И из этого предположим чтобы был ответ типо да или нет...

Функция Sign
подключив math.h (т.к. в описалове значится Unit: Math) не могу вызвать функцию Sign. Странно, но как раз в math.h ничего нет. ...

Нужна функция проверки вводимых данных в Access (БД "салон красоты")
Впервые приходится обращаться с подобным вопросом на форум, но из знакомых помочь реально никто не может, а сам я в VBA ни бум-бум((( ...

Проверки различных условий
char str1,str2,str3; // объявление массивов; unsigned int m; //объявление перменной ,после которой будет вставлена подстрока;...

Функция sign (линейный входной сигнал)
Есть диф. ур. третьего порядка. Входной сигнал не известен, но есть скорость изменения входного сигнала: dx/dt=x1*sign fi(t), где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru