2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Попадает ли точка в треугольник на сфере
Сообщение31.10.2012, 15:47 


22/03/10
25
Цитата:
так как фактически в проверке условия a*b < 0 компьютер проверяет только знаки сомножителей.
Думаю, это зависит от компилятора. Лично мне не хотелось бы писать компиляторозависимый код. Чтобы не было потом мучительно больно искать ошибку в многокоде. Тем более это базовый сущности, которые будут использоваться буквально в каждой последующей строке кода.
Провёл небольшой тест:
Код:
// const MinSingle   =  1.4012984643248170709e-45;
// const MinExtended = 3.64519953188247460253e-4951;
// константы взяты из системного модуля Math, и вынесены сюда для наглядности

var sx,sy:single; // 32bit аналог float в Си
      ex,ey:extended; // 80bit аналога на Си не знаю
begin
  sx := MinSingle;
  sy := MinSignle;
  ShowMessage( BoolToStr( sy*sx<0 ) );// вернуло 0 - верно
  sx := -MinSingle;
  ShowMessage( BoolToStr( sy*sx<0 ) );// вернуло -1 - верно
// потом я вспомнил что в Delphi все операции с плавающей точкой преобразуются в тип Extended
// решил проверить как там дела обстоят
  ex := MinExtended;
  ey := MinExtended;
  ShowMessage( BoolToStr( ey*ex<0 ) );// вернуло 0 - верно
  ex := -MinExtended;
  ShowMessage( BoolToStr( ey*ex<0 ) );// вернуло 0 - НЕ верно
end;
Так что опасность не преувеличена.

Кстати, ф-ия Sign есть(век живи - век учись), внутри которой находится всё тот же if
Код:
function Sign(const AValue: Single): TValueSign;
begin
  if (PInteger(@AValue)^ and $7FFFFFFF) = $00000000 then
    Result := ZeroValue
  else
    if (PInteger(@AValue)^ and $80000000) = $80000000 then
      Result := NegativeValue
    else
      Result := PositiveValue;
end;
Посмотрев на Sign мне захотелось оставить свой if.
Цитата:
По трем ребрам (векторам), выходящим из одной вершины параллелепипеда, этот пипед восстанавливается однозначно.
Ну теперь всё встало на свои места. Спасибо!

 Профиль  
                  
 
 Re: Попадает ли точка в треугольник на сфере
Сообщение31.10.2012, 22:00 
Заслуженный участник


27/04/09
28128
snake32 в сообщении #638269 писал(а):
Так что опасность не преувеличена.
Стандарт IEEE 754 о представлениях чисел с плавающей запятой определяет специальный «отрицательный ноль», который точно есть в 32- и 64-разрядных Single и Double. В Extended он тоже должен бы быть. Что выдаст Sign(ex * ey)?

-- Чт ноя 01, 2012 01:01:47 --

Простая проверка на равенство отрицательного и положительного нулей даст True.

 Профиль  
                  
 
 Re: Попадает ли точка в треугольник на сфере
Сообщение01.11.2012, 00:29 


22/03/10
25
Цитата:
Что выдаст Sign(ex * ey)?
Выдаёт 0, так как умножение минимально возможных величин ведёт к отсечению не поместившейся дробной части. Остаётся 0.
Код:
«отрицательный ноль»
да, я тоже думал что -0.0 < 0.0 однако это не так. вернёт false.

 Профиль  
                  
 
 Re: Попадает ли точка в треугольник на сфере
Сообщение01.11.2012, 00:49 
Заслуженный участник


11/05/08
32166
Изобретать можно разные частные случаи. Но конкретно в этой задачке вероятность неприятностей -- пренебрежимо мала.

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

 Профиль  
                  
 
 Re: Попадает ли точка в треугольник на сфере
Сообщение01.11.2012, 14:34 
Заслуженный участник


27/04/09
28128
snake32 в сообщении #638582 писал(а):
да, я тоже думал что -0.0 < 0.0 однако это не так. вернёт false.
Нет, по сравнению они и задуманы быть равными, но знак-то можно отдельно посмотреть. Странно, что он не сохранился при перемножении в этот раз — он же обрабатывается, по идее, отдельно от мантиссы без знака и порядка.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group