Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];

Вниз

Целочисленное деление mysql и...   Найти похожие ветки 

 
Дмитрий С ©   (2011-08-29 08:32) [0]

.. всем прочем, где явно нет такого оператора как div.
Здравый смысл подсказывает, что FLOOR(123/20) == 123 div 20, но возникает 2 вопрос:
1. Почему нет явного оператора целочисленного деления (или как его называют деления с остатком), который быстрее будет преобразований и округлений?;
2. Может ли дать сбой функция FLOOR, когда результат и так целое число? Например, FLOOR(40/20). 40/20 по идее может дать результат подобный 1.99999999999..., который функция FLOOR превратит в 1.
По идее более надежным будет такой способ: a div b == round((a - a%b)/b)


 
И. Павел ©   (2011-08-29 08:49) [1]

> 40/20 по идее может дать результат подобный 1.99999999999

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

PS: В MySQL есть функции для определения остатка: http://sevidi.ru/webd/dweb/phppage43.php


 
Anatoly Podgoretsky ©   (2011-08-29 09:05) [2]

> Дмитрий С  (29.08.2011 08:32:00)  [0]

В большинстве СУБД тип деления определяется операндами, а mysql это странная
СУБД, там может быть все не так.


 
Anatoly Podgoretsky ©   (2011-08-29 09:07) [3]

> И. Павел  (29.08.2011 08:49:01)  [1]

Учитывая, что обычно числа нормальнованы, и целая часть всегда равна нулю.
"Целая" часть всегда считает точно, не потому что целая, а потому что это
точная дробь


 
Омлет ©   (2011-08-29 09:25) [4]

Так там есть div: http://dev.mysql.com/doc/refman/5.1/en/arithmetic-functions.html#operator_div


 
Дмитрий С ©   (2011-08-29 09:46) [5]


> Омлет ©   (29.08.11 09:25) [4]
>
> Так там есть div: http://dev.mysql.com/doc/refman/5.1/en/arithmetic-
> functions.html#operator_div

Ух ты. Надо бы время от времени обновлять скаченный мануал:) Спасибо!


 
Дмитрий С ©   (2011-08-29 09:48) [6]


> И. Павел ©
> Anatoly Podgoretsky ©

А можно более земным языком? интересно.


 
Anatoly Podgoretsky ©   (2011-08-29 10:20) [7]

123/20 это целочисленое деление, а 123/0.20 с плавающей запятой


 
Anatoly Podgoretsky ©   (2011-08-29 10:24) [8]

123/20.0


 
И. Павел ©   (2011-08-29 10:41) [9]

> А можно более земным языком? интересно.

Вот, наверное, лучшая статья про погрешности в плавающей арифметике: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374 .

Вот моя попытка обяснить, почему целые числа представляются точно, получилось не очень понятно, но после прочтения статьи скорее всего, это будет и так очевидно:

Если при вычислении в качестве ответа будет число 0.1, то погрешность возникнет потому, что 0.1 в двоичной системе счисления - бесконечная дробь (т.к. ее нельзя выразить суммой степеней двойки) и она будет обрезана справа. А любое целое число можно выразить суммой степеней двойки, поэтому из них не выйдет бесконечных дробей (потом эту часть делят на 2 в какой-то степени, сдвигая вправо, за запятую, для нормальзации и если число отрицательное, но числовое представление ее при этом останется прежним - не бесконечным).


 
И. Павел ©   (2011-08-29 10:46) [10]

> и если число отрицательное

то еще в виде доп. кода представляют, но это тоже не делает дробь бесконечной


 
Inovet ©   (2011-08-29 11:03) [11]

> [10] И. Павел ©   (29.08.11 10:46)
> > и если число отрицательное
>
> то еще в виде доп. кода представляют, но это тоже не делает дробь бесконечной


Это про FPU? И почему отрицательные оговорёны особенно?


 
И. Павел ©   (2011-08-29 11:13) [12]

> Это про FPU? И почему отрицательные оговорёны особенно?

Я спутался. У отрицательных чисел с плавающей запятой мантисса не меняется и [10] тоже, конечно, не правильно.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1315739001
я
2011-09-11 15:03
2011.12.18
ftGraphic, DBGrid,ClientDataSet,DataSource


15-1314332947
xayam
2011-08-26 08:29
2011.12.18
Приглашение на Хабр


15-1314204395
Кто б сомневался
2011-08-24 20:46
2011.12.18
Свежая Windows 7 - проблемы с удалением файла


3-1268739476
Rob
2010-03-16 14:37
2011.12.18
СУБД с возможностью хранения текстовых документов в сжатом виде.


1-1277897030
Tangar83
2010-06-30 15:23
2011.12.18
Ошибка при использовании TWebBrowser





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский