Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Микро-калькулятор
Guest
Всем привет.

Сабж. Введите это выражение (БЕЗ СКОБОК!) в MS Excel, затем в своей СУБД (select ... from ...)

Что будет в итоге ?
30 окт 09, 21:22    [7865013]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
по-моему баян
31 окт 09, 00:35    [7865711]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Микрокалькулятор
Guest
Куда рыть ? дайте тынц, плз.
31 окт 09, 08:35    [7865908]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
leonbn
Member

Откуда: СПб
Сообщений: 522
Во, блин. Firebird 2.1 выдал муйню: -36
Почему?
31 окт 09, 16:57    [7866661]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13666
 $sql = mysql_query('SELECT 36/-4/3');
 $q = mysql_fetch_row($sql);
 print_r($q);

автор
Array ( [0] => -3.00000000 )

иии?
31 окт 09, 17:05    [7866666]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Микро-калькулятор
Guest
ps. интересуют не только результаты в select'ах, но и в интерпретаторах выражений ЯВУ (pascal, c#, powerbuilder, java etc)
31 окт 09, 19:19    [7866815]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 13666
И в СУБД и в EXCEL все верно считается. А что собственно должно быть?
31 окт 09, 19:22    [7866817]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Микро-калькулятор
Guest
Hett
И в СУБД и в EXCEL все верно считается. А что собственно должно быть?

1) в экселе ввожу в ячейку формулу:
=36/-4/3
- получаю ответ -3 (минус три); то есть вроде как всё понятно: он разделил сначала 36 на -4, получил -9, а затем это число разделил на 3 и получил -3.
2) соединяюсь с СУБД Firebird 2.1 через isql, даю вот такую команду:
<fb_home_path>\bin\isql -user myself -p mypass -m -i calc.sql -o calc.log 192.168.0.1:<disk:\path\fb_database.fdb>
в скрипте calc.sql при этом пишу:
select 36/-4/3 as test from rdb$database;
commit;
- и вижу в логе calc.log:
TEST
=========================
-27.00000000000000

3) открываю MS SQL Studio (2005 XE), пишу:
select 36/-4/3
- результат: -36.

А вот теперь встречный вопрос: а действительно, что должно быть в итоге ? ;-)
31 окт 09, 20:04    [7866877]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
S.G.
Member

Откуда: cartoon network
Сообщений: 30611
Микро-калькулятор
ps. интересуют не только результаты в select'ах, но и в интерпретаторах выражений ЯВУ (pascal, c#, powerbuilder, java etc)
Насчет Паскаль/Дельфи можешь не волноваться. Там знак "/" строго для деления чисел с плавающей запятой, а для целочисленых используется "div". Ну и выполнение операций слева направо, с учетом "ранговости", т.е. (*/) (+-), как в математике.

Эффект (имхо) появится если :
1. Выражение воспримется целочисленым, сообразно операндам (36,3,4)
2. и вычислится справа налево
тогда -4/3 = -1 и потом 36/-1 = -36
.. а почему справа налево, потому что есть некая неоднозначность в выражении, знак минус можно принять за знак 4-ки и за минус, и возможно парсер выражения не срабатывает правильно.

select 36/(-4)/3 from rdb$database
срабатывает правильно

вообще-то всегда когда есть сомнения в правильности порядка вычислений, надо пользоваться скобочками, они не занимают много места ;)
31 окт 09, 20:27    [7866909]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
hvlad
Member

Откуда:
Сообщений: 11551
leonbn
Во, блин. Firebird 2.1 выдал муйню: -36
Почему?
Бага. Старая. Исправление уже готово.
31 окт 09, 20:32    [7866916]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Микро-калькулятор
Guest
hvlad,

а тогда что получается, он -27 получил как (36/(-4))*3 ?
31 окт 09, 20:33    [7866922]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7000
Микро-калькулятор
вижу в логе calc.log

это еще и от диалекта зависит. У тебя база в 1-м диалекте, вычисление идет в double, получаешь -27. В 3-м диалекте вычисление пойдет в integer и получится -36.
31 окт 09, 20:35    [7866926]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Микро-калькулятор
Guest
S.G.
надо пользоваться скобочками, они не занимают много места ;)
хе-хе-хе... :-) вопрос как раз и возник из-за того, что в коде эти скобочки были случайно(?) пропущены одним нашим торопливым кодером. Только выражение, ес-сно, было немного другое, с переменными. И когда подставили конкретные числа, то удивились немало :-)
31 окт 09, 20:36    [7866928]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Микро-калькулятор
Guest
dimitr
Микро-калькулятор
вижу в логе calc.log

это еще и от диалекта зависит. У тебя база в 1-м диалекте, вычисление идет в double, получаешь -27. В 3-м диалекте вычисление пойдет в integer и получится -36.
фига се... спасибо, этого я не знал!
31 окт 09, 20:37    [7866930]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
S.G.
Member

Откуда: cartoon network
Сообщений: 30611
Микро-калькулятор
в коде эти скобочки были случайно(?) пропущены одним нашим торопливым кодером.

------ offtop begin ---------
торопливым? он еще не постиг дао ...

LAZINESS
Success is a journey, not a destination. So stop running.

:)
------ offtop end ---------
31 окт 09, 20:48    [7866950]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47197
+ для Microsoft SQL Server
Приоритет операторов (Transact-SQL)
Приоритет типов данных (Transact-SQL)

1. Приоритет унарного минуса меньше чем оператора деления. Поэтому минус в данном выражении относится к результату деления целого 4 на целое 3.
2. Результат деления двух целых - целое:
Приоритет типов данных
Если оператор связывает два выражения различных типов данных, то по правилам приоритета типов данных определяется, какой тип данных имеет меньший приоритет и будет преобразован в тип данных с большим приоритетом. Если неявное преобразование не поддерживается, возвращается ошибка. Если оба операнда выражения имеют одинаковый тип данных, результат операции будет иметь тот же тип данных.
Поэтому он равен 1. Получается деление 36 на -1.
Кстати, п.1 неочевиден. Чаще всего унарные операторы имеют более высокий приоритет, чем бинарные.
3 ноя 09, 16:36    [7878030]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67433
Блог
Микро-калькулятор
Что будет в итоге ?

Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0 
Connected as test


SQL> select 36/-4/3 from dual;

   36/-4/3
----------
        -3
3 ноя 09, 21:20    [7879317]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
hvlad
Member

Откуда:
Сообщений: 11551
iap,

В приведенной ссылке отсутствует приоритет унарных операторов.
3 ноя 09, 22:53    [7879580]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
hvlad
Member

Откуда:
Сообщений: 11551
hvlad
iap,

В приведенной ссылке отсутствует приоритет унарных операторов.
Тьфу, они унарный минус и плюс как "+ (положительное), - (отрицательное)" обозвали.

Сейчас набежит толпа любителей МССКЛ, утверждая, что так и надо
Я о приоритете
3 ноя 09, 22:56    [7879590]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
hvlad,

так есть.
А как "надо" - вопрос дискуссионный.
3 ноя 09, 23:58    [7879835]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
hvlad
Member

Откуда:
Сообщений: 11551
locky
hvlad,

так есть.
А как "надо" - вопрос дискуссионный.
В стандарте я не нашёл приоритетов операций.
Но, есть ли ещё один язык программирования, в котором унарные плюс\минус имеют приоритет не выше, чем другие арифметические действия ?
4 ноя 09, 00:51    [7880011]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54772

hvlad

Но, есть ли ещё один язык программирования, в котором унарные плюс\минус
имеют приоритет не выше, чем другие арифметические действия ?

Кстати, язык, в котором бы унарные операции было разрешено применять к
результату других унарных операций лично мне не попадался. Т.е. с
синтаксической точки зрения 36/+-4 это недопустимая конструкция. Хотя,
может, я просто слишком осторожничал при наборе... Но с Сях, например,
при 36/--4 возникает неоднозначность.

Posted via ActualForum NNTP Server 1.4

4 ноя 09, 01:05    [7880029]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
hvlad
Member

Откуда:
Сообщений: 11551
Dimitry Sibiryakov
Но с Сях, например,
при 36/--4 возникает неоднозначность.
Здесь нет неоднозначности, т.к. "--" это самостоятельный оператор.
4 ноя 09, 01:09    [7880033]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
hvlad
locky
hvlad,

так есть.
А как "надо" - вопрос дискуссионный.
В стандарте я не нашёл приоритетов операций.
Но, есть ли ещё один язык программирования, в котором унарные плюс\минус имеют приоритет не выше, чем другие арифметические действия ?

Mumps?
Но точно не помню.
4 ноя 09, 01:45    [7880067]     Ответить | Цитировать Сообщить модератору
 Re: Какой у вас результат ычисления вот этого: 36/-4/3 ?  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
hvlad
В стандарте я не нашёл приоритетов операций.
Но, есть ли ещё один язык программирования, в котором унарные плюс\минус имеют приоритет не выше, чем другие арифметические действия ?

Для СУБД Caché арифметические операции не имеют приоритета: Arithmetic Operators.
select 36/-4/3 from dual -- результат: -3
select 36/+-4 from dual -- результат: -9
select 36/'--4' from dual -- результат: +9
select 36/- -4 from dual -- результат: +9
4 ноя 09, 08:44    [7880186]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить