Уилсон оценка интервал является доверительным интервалом вероятности успеха, основываясь на доле успехов в наборе испытаний Бернулли (испытание Бернулли является исследованием , в котором ровно два результата возможен: успех или неудача ). Интервал задается следующей формулой:
Два значения, заданные формулой, являются верхней и нижней границами интервала. n S и n F - количество успехов и неудач соответственно, а n - общее количество испытаний (эквивалентно n S + n F ). z - параметр, зависящий от желаемого уровня достоверности. Для целей этой задачи будет использоваться z = 1,96 (что соответствует доверительному интервалу 95%) 1 .
Учитывая неотрицательные целые числа n S и n F , выведите границы интервала оценки Вильсона.
правила
- Выходные данные должны быть максимально точными к истинным значениям в пределах реализации вашего языка с плавающей запятой, игнорируя любые потенциальные проблемы из-за арифметических неточностей с плавающей запятой. Если ваш язык допускает арифметику с произвольной точностью, он должен быть как минимум настолько же точным, как арифметика двойной точности IEEE 754.
- Входные данные будут в пределах представимого диапазона для родного целочисленного типа вашего языка, а выходные данные будут в пределах представимого диапазона для родного типа с плавающей запятой вашего языка.
- n всегда будет позитивным.
- Порядок выводов не имеет значения.
Тестовые случаи
Формат: n_s, n_f => lower, upper
0, 1 => 0.0, 0.7934567085261071
1, 0 => 0.20654329147389294, 1.0
1, 1 => 0.09452865480086611, 0.905471345199134
1, 10 => 0.016231752262825982, 0.3773646254862038
10, 1 => 0.6226353745137962, 0.9837682477371741
10, 90 => 0.05522854161313612, 0.1743673043676654
90, 10 => 0.8256326956323345, 0.9447714583868639
25, 75 => 0.17545094003724265, 0.3430464637007583
75, 25 => 0.6569535362992417, 0.8245490599627573
50, 50 => 0.40382982859014716, 0.5961701714098528
0, 100 => 0.0, 0.03699480747600191
100, 0 => 0.9630051925239981, 1.0
z
Значение является1-α/2
й квантиль стандартного нормального распределения, гдеα
находится уровень значимости. Если вы хотите 95% доверительного интервала, ваш уровень значимости являетсяα=0.05
иz
значение1.96
.
Ответы:
Mathematica, 48 байт (кодировка UTF-8)
Безымянная функция, принимающая два аргумента в порядке
n_s, n_f
и возвращающая упорядоченную пару действительных чисел.√
Трехбайтовый символ , представляющий функцию квадратного корня, является U-221A.Использует тот факт, что предшествующее
##
число приводит к произведению двух аргументов, а+##
приводит к их сумме. Также используется тот факт, что продукты и суммы автоматически пронизывают списки, что{-1,1}√(...)
реализует ± в формуле. Определение константыs = z^2
вместоz
нее также позволило сэкономить пару байтов. (В основном я просто горжусь тем, что сохранил байт, заметив, что1.4^4
это точно1.96^2
!)источник
Perl 6 , 66 байт
Эта функция фактически возвращает ор-соединение нижней и верхней границ; например, если вызывается с аргументами 100 и 0, возвращается:
Это, по меньшей мере, нетрадиционный формат вывода, но не был указан конкретный формат, и присутствуют оба обязательных значения.
источник
05AB1E , 34 байта
Вход имеет вид
[n_s, n_f]
Выход имеет вид
[upper, lower]
Попробуйте онлайн!
объяснение
источник
Рунические чары , 105 байт
#StillBetterThanJava
Попробуйте онлайн!
Входные данные имеют вид
n_s n_f
Выходные данные имеют вид
lower upper
и имеют завершающий пробелБоже мой, это беспорядок. Вот развернутая версия:
Все
y
это должно замедлить второй IP, чтобы онT
достиг точки передачи в нужное время (т.е. второй). Это перемещает верхние 3 элемента одного указателя на другой (настройка этого действия показана ниже).'Ä1C,
генерируетz
путем деления символа 196 на 100 (dup, square, dup, div 2, dup, div 2 ...). Все остальное - просто набор математических и стековых манипуляций, чтобы сбрасывать будущие значения в стек, пока они не понадобятся. По большей части они оказываются в правильном порядке, и только до тех порr4s{++}
, пока нам не понадобится перевернуть стек и повернуть все это, чтобы получить нужные значения рядом друг с другом.Вероятно, есть место для улучшения, но оно достаточно сложное, чтобы я его не видел. Черт, случайно прочитал «z» вместо «n» в исходной формуле в какой-то момент, и исправить это было грубо.
Мне нужно было вытащить карточки и смоделировать стопки, чтобы убедиться, что это правильно:
Каждый из них имеет значение на обоих концах из-за того, сколько было переменных (например, у меня была бы одна с S и одна с F, я бы совал их обе, перевернул одну и добавил S + F, который был на другой конец к вершине стека). Вы можете видеть, что одна из
sqrt(...)
карт имеетS
нижний край.источник
R ,
5853514941 байт-15 байт благодаря Дж. Доу. -2 байта благодаря Джузеппе.
источник
MATL ,
3837 байтВходной массив из двух чисел, в любом из этих форматов:
[25 75]
,[25, 75]
,[25; 75]
.Попробуйте онлайн! или проверьте все контрольные примеры .
источник
Haskell ,
70 69 6867 байтПопробуйте онлайн!
источник
APL (Dyalog Unicode) , 50 байтов
Попробуйте онлайн!
Спасибо H.PWiz и dzaima за помощь.
Как:
источник
z←1.9208⋄(z+⊣(-,+).5*⍨z×z+2×⊣×⊢÷+)÷z+z++
z
его при самом правом использовании:...÷z+(z←1.908)++
для того же количества байтов. Также:⊣×⊢÷+
->×÷+
Python,
7967 байтВыход - это сложное целое число с интервалом, хранящимся как вещественная / мнимая часть.
источник
постоянный ток , 71 байт
Принимает оба входа в две отдельные строки при вызове и выводит в две отдельные строки с верхней границей внизу и нижней границей на сверху .
Например:
источник
Ракетка 134 байта
Ungolfed:
Тестирование:
Выход:
источник
Java 7, 130 байт
Golfed:
Ungolfed:
Попробуйте онлайн
Возвращает массив типа double длины 2, вероятно, может быть больше в гольфе.
источник
> <> с
-v
флагом, 100 байтОжидает, что входные данные будут присутствовать в стеке в начале выполнения, в порядке
n_s, n_f
. Попробуйте онлайн!Какой глупый язык, чтобы попытаться это в ...
Поскольку> <> не хватает оператора степени или корневого оператора, квадратный корень вычисляется во второй строке кода с использованием вавилонского метода с точностью
1e-8
- для каждого примера, который я пробовал, с точностью не менее 10 десятичных знаков. Если это не достаточно точно, границы могут быть ужесточены, добавив больше:*
во второй строке, перетасовывая вещи, чтобы сохранить зеркала в линии.Вывод в следующем виде:
источник
Pyth, 38 байт
Ввод в виде списка значений
[n_s, n_f]
. Вывод:[upper, lower]
попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .источник
Желе , 30 байт
Попробуйте онлайн!
объяснение
Заметка
Некоторые из этих функций новее, чем вызов. Я полагаю, что в то время, когда этот вызов был опубликован,
++®¶×÷++1.96²©HH¤×®½×-,1+®H¤+³÷ç
был действительно Jelly (32 байта), не хватаетɗ
иØ-
.источник
APL (NARS), 49 символов, 98 байтов
тестовое задание
источник