Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Java Script: Вопрос по Math.round  (Прочитано 9751 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« : 17-12-2006 20:53 » 

цитата из документа Ecma-262:
NOTE 2
The value of Math.round(x) is the same as the value of Math.floor(x+0.5), except when x is
−0 or is less than 0 but greater than or equal to -0.5; for these cases Math.round(x) returns −0,
but Math.floor(x+0.5) returns +0.


Объясните пожалуйсто смысл? У меня просто с англ. немнго проблем, а тут еще суть саму не пойму...
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 18-12-2006 07:23 » 

1.  Операция floor(x) возвращает целое, не превосходящее x.
2.  В EcmaScript используют представление вещественных чисел из стандарта IEEE 754, который определяет два числа со значением 0. Они обозначаются +0 и -0.


Процитированный в вопросе текст есть формальное определение операции round:

если x < -0,5 или x > 0 или x == +0, то round(x) = floor(x+0,5)
иначе /* -0,5 <= x < 0 или x == -0 */ round(x) = -0.

Специальный случай для -0,5 <= x < 0 или x == -0 можно объяснить на примере. Возьмём число -0,2.  Для него round(-0,2) должно быть равно -0, так как результат должен быть одного знака с аргументом.  Но floor(-0,2 + 0,5) == floor(+0,3) = +0, что в смысле IEEE 754 не равно -0.
« Последнее редактирование: 18-12-2006 12:34 от npak » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Razor
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 18-12-2006 09:17 » 

npak, оо...спасиб)
а вот -0 и +0 - это как-то на практике может быть использовано или это только для теории два варианта числа 0?

Цитата
Операция round(x) возвращает целое, обладающее следующими свойствами:
а. не превосходит по модулю x,
б. одного знака с x
в. Среди всех целых, удовлетворяющих свойствам а и б, обладает наибольшим модулем.
Другими словами, round(x) возвращает целое, ближайшее со стороны нуля.
это как? round(x) вроде нормально округливает число, т.е. если x=5.6 то число возвращаемое будет 6, но это больше чем 5.6 по модулю, или я чего-то опять недопонял..это если только про отрицательные x?
« Последнее редактирование: 18-12-2006 09:23 от Razor » Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 18-12-2006 12:33 » new

Да, про round я бред написал.
round действительно округляет к ближайшему целому.

Особый случай только в интервале от -0.5 до -0 - использование функции floor даёт +0, а нужно -0.

Возникновение двух нулей вызвано тем, что в стандарте IEEE 754 выделен отдельный бит для хранения знака.
« Последнее редактирование: 18-12-2006 12:36 от npak » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines