uint32_t at_least_one_girl = 0;
uint32_t two_girls = 0;
for (uint32_t i = 1; i <= 1000; ++i)
{
bool child_1_is_girl = is_girl();
bool child_2_is_girl = is_girl();
if (child_1_is_girl || child_2_is_girl)
{
++at_least_one_girl;
if (child_1_is_girl && child_2_is_girl)
++two_girls;
}
}
Функция is_girl возвращает true с вероятностью 0.5. Проверяем, если хотя бы один ребёнок девочка, то наращиваем счётчик at_least_one_girl. Проверяем, если оба ребёнка девочки, то наращиваем счётчик two_girls. Повторяем процесс в цикле. После цикла смотрим чему равно отношение two_girls / at_least_one_girl.
Теперь чтобы понять, что такое точка, нам как минимум нужно знать, что есть множество, пустое множество, равенство множеств, объединение и пересечение множеств.
А вообще, странное определение. Пусть есть точка x, множество A = {x}, множества B = A и C = A. Тогда в соответствии с приведённым определением получаем, что множество A (состоящее из одной точки) имеет части.
Точка есть то, что не имеет частей. («Точка есть то, часть чего ничто»)
Линия — длина без ширины.
Края же линии — точки.
Прямая линия есть та, которая равно лежит на всех своих точках.
Определение прямой есть, оно использует такие понятия как «линия» и «точка», а ещё некое «равно лежит на». Вроде бы интуитивно понятно, но вообще говоря не плохо бы определить что означает «равно лежать».
Также если взглянуть на определение точки, то мы заметим что используются некий термин «части», и утверждается, что точка этих частей не имеет. Тут тоже было бы неплохо определить понятие «часть», и что вообще значит фраза «не иметь частей».
Чтобы дать определения приведённым выше понятиям, мы должны использовать некие другие заданные ранее определения. А они в свою очередь должны опираться на заданные ещё раньше определения и так далее до бесконечности.
Евклид решил прервать эту цепь рассуждений на этапе
Прямая линия есть та, которая равно лежит на всех своих точках.
Тогда что такое «линия, равно лежащая на всех своих точках»? Это «прямая» :)
Доводилось есть одну и ту же еду каждый день. Да, надоедает. Но стоит сменить рацион на несколько дней, и ощущение удовольствия от вроде бы надоевшей еды снова возвращается. Многие блюда как нравились мне 25 лет назад, так нравятся и сейчас.
Сон тут явно не удачный пример.
Потому что опровергает ваши утверждения?
С сексом всё тоже самое
То же самое как с едой и сном? Никогда не перестанет нравится, если иметь нестареющее тело?
Всё дело в том что жизнь не имеет смысла без смерти. Став бессмертным вы лишитесь всех удовольствий, будете влачить скучное серое существование
Это ваше предположение, и не более. Ведь экспериментов таких не было.
Он всё равно не будет интересоваться сексом и не будет любить как в первый раз, у него уже всё было.
Угу, и есть не будет хотеть, ибо уже когда-то ел; и спать не будет хотеть, ибо уже когда-то спал.
с тех пор фанта поменялаь? Вряд ли.
Так она на самом деле не поменялась или это не более чем ваше предположение? Кстати, а что там с вкусовыми рецепторами? Такие же молодые как и 25 лет назад?
Пусть произошли все ныне живущие люди от некоего общего предка, пусть совпадает ДНК на 99,9%. Это никак не отменяет биологические отличия, видимые невооружённым взглядом.
Так нет же таких признаков. Визуально Вы не отличите среднестатистического жителя центральной Африки от среднестатистического жителя России. Ведь «биологически отличий нет. Вообще.»
Потому что в C пустые структуры на самом деле запрещены. What is the size of an empty struct in C?. Компиляция с опцией -pedantic выдаёт в gcc: warning: struct has no members, а в clang: warning: empty struct is a GNU extension.
С теорией не всё в порядке, и это известно. Альтернативных теорий предостаточно. Но похоже, что все они на данный момент имеют те или иные проблемы. За неимением лучших альтернатив приходится много лет педантично накапливать экспериментальные данные в надежде подобрать ключ к решению загадки тёмной материи.
Зачем вы транслируете этот форс абуза UB? Да и не только вы.
Затем, что использовать возможность языка, которая явным образом задокументированна, как приводящая к непредсказуемым последствиям — это баг, ошибка и саботаж.
В рассматриваемом коде нет получения indeterminate значения через evaluation
Чтение неинициализированной автоматической переменной при инициализации параметра функции и есть часть процесса evaluation. И в данном конкретном случае такое чтение вызывает неопределённое поведение. В стандарте даже есть схожий пример кода. basic.indet / Example 1:
unsigned char c;
unsigned char d = c; // OK, d has an indeterminate value
int e = d; // undefined behavior
В неинициализированной локальной переменной значение не специфицированно, что всего лишь означает, что в ней, пусть и неизвестное, но одно из легальных значений, что для bool это true или false.
В черновике 17 стандарта есть даже сноска про то, что чтение неинициализированной bool переменной может вернуть нечто отличное от true и false. basic.fundamental / 50):
Using a bool value in ways described by this International Standard as “undefined”, such as by examining the value of an uninitialized automatic object, might cause it to behave as if it is neither true nor false.
Обсуждается ли возможность добавления restrict квалификатора или каких-нибудь аналогов?
Скорее даже хотелось бы иметь некоторую магическую функцию наподобие std::assume_aligned, которая бы сообщала компилятору, что переданные ей указатели / ссылки гарантированно ссылаются на неперекрывающиеся области памяти. Что-то вроде такого:
В приведённом примере, после вызова функции std::assume_no_alias(p1, p2, i1, i2, val) компилятор мог бы быть уверен, что объекты i2, p1[10], p2[0], *p1, i1, val, p2[10] расположены в попарно неперекрывающихся областях памяти.
Данная функция особенно полезна была бы для указателей char*, для которых из-за опасности алиасинга компилятор вынужден генерировать менее производительный код. Пример: https://godbolt.org/z/PqWj61ePz
Если по адресу записываемому адресу на момент исполнения программы всегда живёт объект нужного типа, абсолютно валидно туда что-то писать.
Это не так. К сожалению, значение указателя определяется не только адресом, который хранит указатель, но и операциями, которые были совершены над данным конкретным указателем и областью памяти, адрес которой он хранит.
Например, функция realloc инвалидирует переданный ей указатель. И даже если realloc вернёт переданный ей адрес, исходный указатель всё равно считается невалидным. То есть хоть исходный указатель указывает на живой объект нужного типа, попытка достучаться к объекту через этот указатель вызывает неопределённое поведение.
Затем, что если один раз подбросить монетку и узреть орла, то нельзя утверждать, что вероятность выпадения орла равна 1.
Где конкретно вы предлагаете «поставить end» и какой «результат» мы узреем?
Нужен опрос к посту. Если одно из следующих утверждений верно, то проголосуйте за него:
У вас есть двое детей — девочка и мальчик.
У вас есть двое детей — обе девочки.
Ладно, а если так. Небольшой проверочный код:
Функция
is_girl
возвращаетtrue
с вероятностью0.5
. Проверяем, если хотя бы один ребёнок девочка, то наращиваем счётчикat_least_one_girl
. Проверяем, если оба ребёнка девочки, то наращиваем счётчикtwo_girls
. Повторяем процесс в цикле. После цикла смотрим чему равно отношениеtwo_girls / at_least_one_girl
.Полный пример на C++ (ссылка на онлайн компилятор): https://coliru.stacked-crooked.com/a/b335d860188c732e
Вывод отношения
two_girls / at_least_one_girl
(probability
) на разных итерациях цикла:Теперь чтобы понять, что такое точка, нам как минимум нужно знать, что есть множество, пустое множество, равенство множеств, объединение и пересечение множеств.
А вообще, странное определение. Пусть есть точка
x
, множествоA = {x}
, множестваB = A
иC = A
. Тогда в соответствии с приведённым определением получаем, что множествоA
(состоящее из одной точки) имеет части.Взгляните на определение прямой из аксиоматики Евклида:
Определение прямой есть, оно использует такие понятия как «линия» и «точка», а ещё некое «равно лежит на». Вроде бы интуитивно понятно, но вообще говоря не плохо бы определить что означает «равно лежать».
Также если взглянуть на определение точки, то мы заметим что используются некий термин «части», и утверждается, что точка этих частей не имеет. Тут тоже было бы неплохо определить понятие «часть», и что вообще значит фраза «не иметь частей».
Чтобы дать определения приведённым выше понятиям, мы должны использовать некие другие заданные ранее определения. А они в свою очередь должны опираться на заданные ещё раньше определения и так далее до бесконечности.
Евклид решил прервать эту цепь рассуждений на этапе
Тогда что такое «линия, равно лежащая на всех своих точках»? Это «прямая» :)
Доводилось есть одну и ту же еду каждый день. Да, надоедает. Но стоит сменить рацион на несколько дней, и ощущение удовольствия от вроде бы надоевшей еды снова возвращается. Многие блюда как нравились мне 25 лет назад, так нравятся и сейчас.
Потому что опровергает ваши утверждения?
То же самое как с едой и сном? Никогда не перестанет нравится, если иметь нестареющее тело?
Это ваше предположение, и не более. Ведь экспериментов таких не было.
Угу, и есть не будет хотеть, ибо уже когда-то ел; и спать не будет хотеть, ибо уже когда-то спал.
Так она на самом деле не поменялась или это не более чем ваше предположение?
Кстати, а что там с вкусовыми рецепторами? Такие же молодые как и 25 лет назад?
Не самый надёжный источник.
Пусть произошли все ныне живущие люди от некоего общего предка, пусть совпадает ДНК на 99,9%. Это никак не отменяет биологические отличия, видимые невооружённым взглядом.
Так нет же таких признаков. Визуально Вы не отличите среднестатистического жителя центральной Африки от среднестатистического жителя России. Ведь «биологически отличий нет. Вообще.»
Что ещё за расовые признаки, если вы пишите, что биологически рас не существует?
Потому что в C пустые структуры на самом деле запрещены. What is the size of an empty struct in C?. Компиляция с опцией
-pedantic
выдаёт в gcc:warning: struct has no members
, а в clang:warning: empty struct is a GNU extension
.С теорией не всё в порядке, и это известно. Альтернативных теорий предостаточно. Но похоже, что все они на данный момент имеют те или иные проблемы. За неимением лучших альтернатив приходится много лет педантично накапливать экспериментальные данные в надежде подобрать ключ к решению загадки тёмной материи.
Затем, что использовать возможность языка, которая явным образом задокументированна, как приводящая к непредсказуемым последствиям — это баг, ошибка и саботаж.
Чтение неинициализированной автоматической переменной при инициализации параметра функции и есть часть процесса evaluation. И в данном конкретном случае такое чтение вызывает неопределённое поведение. В стандарте даже есть схожий пример кода. basic.indet / Example 1:
В черновике 17 стандарта есть даже сноска про то, что чтение неинициализированной
bool
переменной может вернуть нечто отличное отtrue
иfalse
. basic.fundamental / 50):Обсуждается ли возможность добавления
restrict
квалификатора или каких-нибудь аналогов?Скорее даже хотелось бы иметь некоторую магическую функцию наподобие
std::assume_aligned
, которая бы сообщала компилятору, что переданные ей указатели / ссылки гарантированно ссылаются на неперекрывающиеся области памяти. Что-то вроде такого:В приведённом примере, после вызова функции
std::assume_no_alias(p1, p2, i1, i2, val)
компилятор мог бы быть уверен, что объектыi2
,p1[10]
,p2[0]
,*p1
,i1
,val
,p2[10]
расположены в попарно неперекрывающихся областях памяти.Данная функция особенно полезна была бы для указателей
char*
, для которых из-за опасности алиасинга компилятор вынужден генерировать менее производительный код. Пример: https://godbolt.org/z/PqWj61ePzЭто не так. К сожалению, значение указателя определяется не только адресом, который хранит указатель, но и операциями, которые были совершены над данным конкретным указателем и областью памяти, адрес которой он хранит.
Например, функция
realloc
инвалидирует переданный ей указатель. И даже если realloc вернёт переданный ей адрес, исходный указатель всё равно считается невалидным. То есть хоть исходный указатель указывает на живой объект нужного типа, попытка достучаться к объекту через этот указатель вызывает неопределённое поведение.Следующий код:
Запросто может выдать следующий результат (https://godbolt.org/z/sK7nv9Y6x):
Стандарт языка вам не обещает, что после каста целого числа в указательный тип, вы получите валидный указатель.