понедельник, 15 ноября 2010 г.

Точность - не то же самое, что аккуратность

Это перевод Precision is not the same as accuracy. Автор: Реймонд Чен.

Аккуратность - это насколько вы близки к правильному ответу; точность - это насколько велико разрешение (количество значащих цифр) вашего ответа.

Предположим, вы спросили меня: "Сколько времени?"

Я посмотрел на солнце, понаблюдал за ним некоторое время и сказал: "Сейчас 10:35:22.131".

Я дал вам очень точный ответ (с точностью до миллисекунд), но не очень аккуратный.

В это время вы посмотрели на свои часы - одни из тех новомодных часов, которые имеют отметки только на 3, 6, 9 и 12 часах. Вы морщите лоб и решаете: "Сейчас около 10:05". Ваш ответ намного более аккуратен, чем мой, хотя и менее точен.

Теперь давайте применим это отличие к некоторым функциям времени в Windows.

Функция GetTickCount имеет точность в одну миллисекунду, но её аккуратность обычно намного хуже, зависит от частоты вашего таймера и обычно составляет где-то 10-55 миллисекунд. Функция GetSystemTimeAsFileTime выглядит более внушительно с её 100-наносекундной точностью, но её аккуратность не обязательно лучше, чем у GetTickCount.

Если вы ищите высокую аккуратность, то вам лучше бы обратиться к функции QueryPerformanceCounter. Однако для этого вам нужно пойти на компромиссы. Во-первых, точность результата. Чтобы узнать точность результата, вам нужно вызвать функцию QueryPerformanceFrequency. Ещё один компромисс - более высокая аккуратность QueryPerformanceCounter достигается ценой более медленного вызова.

Что на самом делает QueryPerformanceCounter - решает HAL (с небольшой помощью от ACPI). Ребята из команды производительности рассказали мне, что худший случай получается от перебора (rollover) прерываний на программируемом таймере прерываний. Это, в свою очередь, может потребовать транзакции на PCI, которая, в общем-то, не является быстрейшей штукой в мире. Это всё же лучше чем GetTickCount, но вы не выиграете конкурсов на скорость. В лучшем же случае HAL может решить, что счётчик RDTSC работает с постоянной частотой, так что HAL будет использовать его. Это особенно занимательно для многопроцессорных машин, где вам нужно убедиться, что значения, возвращаемые RDTSC каждого процессора согласованы друг с другом! И тогда, для лучших результатов, добавьте-ка ещё несколько обходных путей для известных багов в железе.

12 комментариев:

  1. Может быть не аккуратность, а погрешность? А то немного коробит.

    ОтветитьУдалить
  2. Да, в этом моменте я долго думал, как лучше переводить.

    "Accuracy" здесь можно перевести как "аккуратность", "правильность", "верность", "достоверность", "соответствие". И есть ещё (явно неверный в этом контексте) вариант "точность".

    Я сначала склонялся к варианту "правильность", но в итоге остановился на буквальном переводе - "аккуратность".

    "Погрешность" же подходит совсем плохо, потому что обозначает обратное к точности.

    ОтветитьУдалить
  3. потому что обозначает обратное к точности
    Нет, даже наоборот.
    Сравните: точность измерения, погрешность измерения.
    Погрешность обладает точностью, так же как и измеряемая величина, при которой возникает эта погрешность. А если Вам надо замерить некую величину на приборе, с точностью до знака, то погрешность такого измерения будет 1/2 шкалы (для аналоговых приборов).

    насколько вы близки к правильному ответу
    По сути, определение погрешности.
    вот википедиа

    Если перевести заголовок с помощью слова "погрешность", то получится игра слов близких по смыслу.

    ОтветитьУдалить
  4. >>> Нет, даже наоборот.

    Больше точность -> хорошо.
    Больше аккуратность -> хорошо.
    Больше правильность -> хорошо.
    Больше погрешность -> плохо.

    Не в ту сторону слово погрешность "смотрит" :)

    >>> Если перевести заголовок с помощью слова "погрешность", то получится игра слов близких по смыслу.

    "Точность - не то же самое что погрешность", так? Да вроде это очевидно, где тут игра слов? Как раз очевидно из-за того, что я только что указал. Другое дело, когда в заголовке указаны два понятия, "растущие в одну сторону".

    Или я не так вас понял.

    ОтветитьУдалить
  5. Хм, Вы удалили моё сообщение?
    А определение "погрешность измерения" Вы посмотрели?

    где тут игра слов
    Тут игра смысла. Для человека, занимающегося экспериментами, это очень близкие понятия. Почти синонимы (погрешность и точность, а не точность и аккуратность).

    Если грубо, то:
    Больше точность -> меньше погрешность
    Больше погрешность -> Меньше точность.

    Не в ту сторону слово погрешность "смотрит"
    Погрешность и точность - это понятия из одной области, а вот аккуратность нет. Вы оперируете с несвязанными понятиями. Поэтому и режет слух. Особенно если учесть связку погрешность-точность.

    ОтветитьУдалить
  6. Не, не удалял. Я сначала было подумал, что это вы его удалили, и ещё удивился, зачем :D

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

    ОтветитьУдалить
  7. Погрешность показывает насколько значение далеко от правильного ответа.

    Аккуратность показывает насколько значение близко к правильному ответу.

    Был бы это не перевод - да, можно было бы сделать иначе. Но поскольку в оригинале стоит всё же precision and accuracy, то пусть уж лучше останется как есть. Тем более, что "погрешность изменений" на английском будет переводиться совершенно иначе, а никак не "accuracy".

    Подозреваю, что вас "немного коробило" бы и от оригинала, так что всё честно.

    Тем не менее, спасибо за замечания. Всегда полезно знать, что тебя читают.

    ОтветитьУдалить
  8. Думаю, тут лучше будет использовать антоним слова "точность". Автор (Реймонд Чен) использовал в заголовке одно из стилистических средств - антитезу, и чтобы правильно перевести заголовок, надо найти антоним к первому слову.

    Мне кажется, тут можно взять или "приблизительность", или "погрешность". Слово "аккуратность" не совсем точно доносит мысль автора.

    ОтветитьУдалить
  9. Так, я, наверное, чего-то не понимаю.

    В каком месте "precision" и "accuracy" являются антонимами?

    Антоним для "accuracy" будет "inaccuracy", что имеет очевидный смысл "неточность". На "precision" (aka "точность") это совершенно не похоже. Следовательно, "precision" и "accuracy" - не антонимы.

    ОтветитьУдалить
  10. Всё правильно, для accuracy антонимом является inaccuracy, это как для "холодный" антонимом будет "не холодный". Но мы же стараемся в разговоре избегать таких громоздких фраз и заменяем "не холодный" на "тёплый", так и иностранцы - они стараются не использовать производные слова в одном предложении.

    По поводу антитезы - повторюсь, тут именно стилистическое средство, то есть способ автора заинтересовать читателя хитро построенной фразой. Что-то вроде заголовка "Путина заперли в тесном помещении!!!" к новости о том, как премьер спускался в батискафе на дно озера Байкал :)

    ОтветитьУдалить
  11. Кстати - красивый счётчик :)

    ОтветитьУдалить
  12. >>> заменяем "не холодный" на "тёплый"

    Т.е. мы заменяем "неточность" на "точность"? O_o

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.