Автор Тема: Сравнение вещественных чисел  (Прочитано 28623 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #30 : Март 16, 2011, 09:04:11 pm »
Не, понятно, что можно получить хрень. Просто если хрень получается громоздкая, то больше шансов задуматься, прежде чем ее написать :)
А она будет громоздкая? Будет ведь нечто вроде eq(a,b) и все.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #31 : Март 16, 2011, 09:10:36 pm »
Не, понятно, что можно получить хрень. Просто если хрень получается громоздкая, то больше шансов задуматься, прежде чем ее написать :)
А она будет громоздкая? Будет ведь нечто вроде eq(a,b) и все.

Прежде чем написать такую "eq" - придется подумать, нафига сделали такое ограничение в языке (убрали равенство). Тогда, глядишь, у этой eq появится третий параметр...

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #32 : Март 17, 2011, 03:58:03 am »
Набор операций сравнения действительных чисел <, =, > заменить на один из наборов <, >= или <=, > .
И что это таки даст?
Ответил в оригинальной теме, чтобы автор предложения мог видеть мой ответ.
Вдруг, он скажет в ответ что-то такое, о чём я даже не задумывался.  :)

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #33 : Март 17, 2011, 04:04:10 am »
Но округление здесь совсем не причем - во всем виновато субпиксельное сглаживание ;)

Тема субпиксельного сглаживания очень интересна и достойна отдельного обсуждения.
Алексей, предлагаю её отделить.

DIzer

  • Гость
Re:Сравнение вещественных чисел
« Ответ #34 : Март 17, 2011, 07:13:07 am »
Cтандартное решение:
 Введение в  язык соответствующей функции   evbool(expression:boolean):boolean которая вычисляет выражкние expression в соответствие с предопределенной в языке констатной eps
и переопределенного варианта  evbool(expression:boolean; const neweps:real):boolean -смысл введения этой функции в ЯП - оптимизация вычисления expression на этапе компиляции...
В целях безопасности можно выдавать ошибку компиляции в тех случаях когда expression содержит сравнения значений переменных с плавающей точкой.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #35 : Март 17, 2011, 10:52:30 am »
Ну, таки да. Причем это можно как вшить в язык, так и сделать либой. На выбор. Либой наверно даже лучше.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #36 : Март 17, 2011, 11:24:33 am »
Cтандартное решение:
 Введение в  язык соответствующей функции   evbool(expression:boolean):boolean которая вычисляет выражкние expression в соответствие с предопределенной в языке констатной eps
Да, неплохой вариант. Чем-то перекликается с тем что я предлагал, только у меня эта обёртка логических выражений (с вещественными операндами) как бы вшита в язык, и программист не имеет возможности её обойти. И к тому же машинно-зависимая константа eps не фигурирует в языке.

DIzer

  • Гость
Re:Сравнение вещественных чисел
« Ответ #37 : Март 17, 2011, 11:53:33 am »
Ну, таки да. Причем это можно как вшить в язык, так и сделать либой. На выбор. Либой наверно даже лучше.
Cомневаюсь,если конечно мы хотим оптимизации вычислений и/или возможности избежать потенциальных проблем на ЭТАПЕ КОМПИЛЯЦИИ...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #38 : Март 17, 2011, 11:56:22 am »
Cомневаюсь,если конечно мы хотим оптимизации вычислений и/или возможности избежать потенциальных проблем на ЭТАПЕ КОМПИЛЯЦИИ...
Хочу пример того, что мы сможем выловить на уровне языка и не сможем выловить на уровне библиотеки (применительно к рассматриваемому вопросу конечно же).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Сравнение вещественных чисел
« Ответ #39 : Март 17, 2011, 12:11:55 pm »
Хочу пример того, что мы сможем выловить на уровне языка и не сможем выловить на уровне библиотеки (применительно к рассматриваемому вопросу конечно же).
Хочу пример того как мы сможем это сделать  :D

Димыч

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #40 : Март 17, 2011, 04:11:06 pm »
Цитировать
расслоение одной линии на три.
Ну где на три, а где и на пять-шесть.
Этот текст отрендерен, вероятнее всего, в рендерере RGBA или BGRA, что дает размытие черного цвета на составляющие при субпиксельном сдвиге. Ничего криминального, нормальный эффект.
Это не так хотя бы потому, что первый образец по определению никто субпиксельно не сдвигал, сдвигали четко на 1 пиксель рывком, так вот, там в точности то же самое расслоение. Кроме того, при определенном значении субпиксельного сдвига расслоение на второй картинке должно было бы полностью пропасть, этого не случилось.

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

Отрисовка шла скорее всего через freetype (agg это умеет), а freetype умеет субпиксельно сглаживать при рендеринге, в отличае от agg. Вообще отрисовка шрифтов не показательна, ибо тут слишком много слоев рендеринга наворочено. В частности зависит и от самого шрифта многое, от того же хинтинга например. :-)

Здесь надо иметь ввиду следующее. AGG достаточно большая библиотека, предназначенная для рендеринга векторной графики. Рендеринг текста в ней делается  сложно - берется шрифтовая информация (набор кривых второго/третьего порядка) для каждого символа и производится отрисовка этой информации (набора кривых). Шрифтовая информация просится у ОС (WinAPI/freetype) или напрямую из шрифтовых файлов (почему нет?).

На графическую поверхность картинку выводит именно AGG, и "гладкая" картинка сделана именно ей. Поэтому AGG и может обеспечить вывод текста с субпиксельной точностью. На практике это означает, что можно позиционировать картинку (текст в том числе) с точностью до 0.1 пикселя (можно и меньше фракцию делать, но видно это начинается где-то с 0.1-0.3 пикселя в зависимости от цвета и примененных фильтров).

PS. Текст в википедии очень уж рекламный и MS-ный.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Сравнение вещественных чисел
« Ответ #41 : Март 18, 2011, 03:08:27 pm »
Набор операций сравнения действительных чисел <, =, > заменить на один из наборов <, >= или <=, > .
И что это таки даст?
Ответил в оригинальной теме, чтобы автор предложения мог видеть мой ответ.
Вдруг, он скажет в ответ что-то такое, о чём я даже не задумывался.  :)
Автор предложения может видеть все ответы и здесь. Форум целиком виден для не зарегистрированных пользователей, а ссылку на тему я там оставил.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"