| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > Как организовать логические операции над вещественными числами?

Как организовать логические операции над вещественными числами?

Ответ
Поиск в этой теме
Непрочитано 14.02.2020, 14:57 #1
Как организовать логические операции над вещественными числами?
nickname2019
 
Регистрация: 18.11.2019
Сообщений: 1,492

Мне нужно организовать основные логические операции над числами с плавающей точкой (например - X и Y).

Как организовать операции AND и OR я разобрался.

X AND Y эквивалентно X*Y (умножить).

X OR Y эквивалентно X+Y (сложить).

Не могу понять, как сделать оператор NOT.
Просмотров: 5228
 
Непрочитано 14.02.2020, 16:56
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,090


Может компетентные люди поняли все сразу, но я, полный ламер, насилил. Какой смысл имеют логические операции над числами с плавающей точкой?
kp+ вне форума  
 
Непрочитано 14.02.2020, 16:59
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Offtop: Переводи в двоичную систему и смотри, что и как получается
0 = 0 => !0 = 1
1 = 1 => !1 = 0
2 = 10 => !2 = 1
3 = 11 => !3 = 0
4 = 100 => !4 = 3
Ну и т.д. )))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2020, 17:02
#4
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,202


Минус(-).
А тебе зачем?
__________________
Не откладывайте на завтра! Положите на всё уже сегодня.(с)
Бахил вне форума  
 
Непрочитано 14.02.2020, 17:31
#5
bigden


 
Регистрация: 05.08.2008
Сообщений: 821


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

----- добавлено через ~2 мин. -----
нет не так. нужно из самого большого (чтобы все биты были единицами) вычесть твое число
bigden вне форума  
 
Автор темы   Непрочитано 20.02.2020, 14:19
#6
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,492


Цитата:
Сообщение от Бахил Посмотреть сообщение
Минус(-).
А тебе зачем?
Допустим
h-ширина колонны (вещественное число, с плавающей точкой).

Если юзер задал ширину колонны - работаем дальше, если нет - останавливаемся.

Код:
[Выделить все]
 Сейчас код выглядит примерно так:

#If|(h)
  //Ничего не делаем, программа пропустит это условие и пойдет дальше
#Else
  #MsgBox|Укажите значение ширину колонны "h"
  #Return|False
#EndIf

А хочу, чтобы было так

#If|(NOT h) 
    #MsgBox|Укажите значение ширину колонны "h"
    #Return|False
#EndIf
nickname2019 на форуме  
 
Непрочитано 20.02.2020, 14:22
1 | #7
Бахил

?
 
Регистрация: 17.06.2014
Царицын
Сообщений: 12,202


EMPTY
__________________
Не откладывайте на завтра! Положите на всё уже сегодня.(с)
Бахил вне форума  
 
Автор темы   Непрочитано 20.02.2020, 14:26
#8
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,492


Цитата:
Сообщение от Бахил Посмотреть сообщение
EMPTY
Спасибо. А может считать, что отрицательные double == FALSE?
Тогда NOT - можно на минус 1 умножать.

С нулем только не понятки.

Последний раз редактировалось nickname2019, 20.02.2020 в 14:36.
nickname2019 на форуме  
 
Непрочитано 20.02.2020, 19:16
| 1 #9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
#If|(NOT h)
****#MsgBox|Укажите значение ширину колонны "h"
Ну зачем так-то, да мучиться с проверками? Во всех системах программирования давно имеются элементы ввода, просто не позволяющие ввести неверные значения. Это и маски ввода, и списки выбора, и "спины". Их применение гарантирует получение только допустимых данных.

Если же два размера надо, то надо и одновременно два элемента использовать, а не последовательно.

Что касается сравнения вещественных чисел, хоть друг с другом, хоть с "истиной", то обычный путь - преобразование чисел в строки с заданным количеством десятичных знаков и сравнение уже строк.
ShaggyDoc вне форума  
 
Непрочитано 20.02.2020, 20:13
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,001


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
преобразование чисел в строки с заданным количеством десятичных знаков и сравнение уже строк.
а разве не быстрее будет:
| A - B | < 0,5 * заданное количество десятичных знаков
чем преобразование в строку, а потом еще сравнение строк?
Сергей812 вне форума  
 
Непрочитано 21.02.2020, 07:19
#11
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а разве не быстрее будет:
| A - B | < 0,5 * заданное количество десятичных знаков
чем преобразование в строку, а потом еще сравнение строк?
В каком-то частном случае - быстрее. Но кому разница в каких-то миллисекундах нужна? В других случаях придется иное сравнение придумывать.

И есть еще много факторов для вещественных чисел, зависящих и от среды программирования и даже от процессора. Да еще и сюрпризы от Microsoft. Вот статья Неочевидные особенности вещественных чисел с обзором для Delphi. В других средах что-то подобное.

И, чтобы не напрягать свои мозги каждый раз, надо просто иметь библиотечные функции для сравнения. Да они давно сделаны.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 21.02.2020, 09:47
#12
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,492


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
В каком-то частном случае - быстрее. Но кому разница в каких-то миллисекундах нужна? В других случаях придется иное сравнение придумывать.

И есть еще много факторов для вещественных чисел, зависящих и от среды программирования и даже от процессора. Да еще и сюрпризы от Microsoft. Вот статья Неочевидные особенности вещественных чисел с обзором для Delphi. В других средах что-то подобное.

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

Я пишу свой язык. Он нетипизированный, т.е. в нем не разделяются целые и вещественные числа. А логические операции нужно как-то описывать.
Обычно ноль - FALSE, не ноль - TRUE.

В моем случае, склоняюсь, что если число отрицательное и ноль - должно быть FALSE.
В этом случае OR сложнее описывается (простой суммой не обойтись). Если одно из чисел положительное - его и возвращает.

или OR - просто возврат максимального значения из двух чисел, это более близко реальности.

т.е.
X OR Y
эквивалентно
MAX(X,Y)

, где MAX - функция, возвращающая максимум из двух чисел.


Пустая переменная, видимо, тоже должна квалифицироваться как FALSE.

Последний раз редактировалось nickname2019, 21.02.2020 в 10:18.
nickname2019 на форуме  
 
Непрочитано 21.02.2020, 10:16
#13
bigden


 
Регистрация: 05.08.2008
Сообщений: 821


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Пустая переменная
вы на каком языке свой ЯП пишете
bigden вне форума  
 
Автор темы   Непрочитано 21.02.2020, 10:22
#14
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,492


Цитата:
Сообщение от bigden Посмотреть сообщение
вы на каком языке свой ЯП пишете
Выглядит примерно как в посте #6. Компилятор на c++. Название языка пока не придумал.
Может #Glagol назову. Только "Глагол" в русской транскрипции один псих (в хорошем смысле) для языка программирования уже забронировал (он в нем все операторы на русском сделал, очень странно выглядит).
nickname2019 на форуме  
 
Непрочитано 21.02.2020, 10:32
#15
bigden


 
Регистрация: 05.08.2008
Сообщений: 821


как-то интуитивно непонятно у вас получится. если булевы операции, то должны быть булевы операции. а у вас отрицательное число это false получается

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от nickname2019 Посмотреть сообщение
все операторы на русском сделал, очень странно выглядит
ну вот американцы вот так вот на своем языке все ключевые слова и видят. ничего, живут как-то. а вообще к такому языку на русском ИДЭ добавить и все школоло перейдут с паскаля на него
bigden вне форума  
 
Непрочитано 21.02.2020, 10:38
#16
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
В моем случае, склоняюсь, что если число отрицательное и ноль - должно быть FALSE.
Нет гарантии, что процессор вернет не отрицательное и ноль, а "чуть-чуть положительное". Занимаясь написанием своего "2001 языка" об этом надо помнить.
Цитата:
Сообщение от bigden Посмотреть сообщение
все школоло перейдут с паскаля на него
Был уже такой язык. "Ершик" назывался по фамилии создателя. Официально "Русский алгоритмический язык". Отбивал у школоты желание заниматься "информатикой".

Последний раз редактировалось ShaggyDoc, 21.02.2020 в 10:44.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 21.02.2020, 10:43
#17
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,492


Цитата:
Сообщение от bigden Посмотреть сообщение
как-то интуитивно непонятно у вас получится. если булевы операции, то должны быть булевы операции. а у вас отрицательное число это false получается
Да. В стандарте языка придется оговорить, что отрицательное число, ноль и пустая переменная - в условных переходах квалифицируются как FALSE.
Просто есть задача описать основные булевые операции для нетипизированных переменных (на самом деле - double) примерно в том виде, как в нормальном языке, чтобы выглядело и работало стандартно.

Цитата:
ну вот американцы вот так вот на своем языке все ключевые слова и видят. ничего, живут как-то. а вообще к такому языку на русском ИДЭ добавить и все школоло перейдут с паскаля на него
Если весь мир пишет ключевые слова в языках переменных на английском, переходить на русский - это очень странно. Америкосы спутник называют русским словом - и нормально. Переменные - да, их надо сделать, чтобы и на русском можно было задавать.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Нет гарантии, что процессор вернет не отрицательное и ноль, а "чуть-чуть положительное". Занимаясь написанием своего "2001 языка" об этом надо помнить.
Да, сравнение реальных чисел нужно делать с учетом допуска вычислений.
nickname2019 на форуме  
 
Непрочитано 21.02.2020, 10:48
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Offtop: Вариант русского языка программирования, кажется, в 1С реализован. Выглядело действительно дико.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2020, 10:52
#19
bigden


 
Регистрация: 05.08.2008
Сообщений: 821


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

Цитата:
Сообщение от nickname2019 Посмотреть сообщение
пустая переменная
а что это такое? не инициализированная?
bigden вне форума  
 
Автор темы   Непрочитано 21.02.2020, 11:00
#20
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,492


Цитата:
Сообщение от bigden Посмотреть сообщение
и в терминологию придется другую придумать. это уже не булевы операции будут. найдется обязательно человек, который гуаном закидает.
На самом деле, мы просто привыкли к двоичной логике. В СССР были компьютеры с троичной системой исчисления (см. компьютер "Сетунь"). Для него гармоничнее была бы троичная логика (-, 0 , +). И логический оператор перехода тоже можно делать троичным ("if0" "else+" "else-" ). Но это для восприятия сложнее, в бинарных переходах бывает трудно разобраться.
Цитата:
а что это такое? не инициализированная?
Да. Когда переменная где то создана, но не инициализирована значением.
nickname2019 на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > Как организовать логические операции над вещественными числами?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли организовать деформационный шов в существующей фундаментной плите Igor1985 Основания и фундаменты 15 08.11.2016 15:52
Как в Solidworks скрыть/неотображать отдельные операции. Трубопровод. vamesc SolidWorks 3 08.10.2014 19:03
Возможны ли булевы операции над сетями? Tannik AutoCAD 6 14.02.2011 13:38
Как пристроить вплотную новую несущую стену к старой и при этом организовать фундамент Lexa Основания и фундаменты 4 05.10.2009 11:03
Как организовать уловие функцией if? Kostinok Программирование 6 30.07.2008 10:07