А ещё бывает, что компилятор вроде и умеет в __builtin_parity, но реализовано оно медленнее, потому что готовой инструкции под это дело в целевом процессоре нет. Попробуйте в этом godbolt-сниппете выбрать, скажем, 32-х битную архитектуру PPC (power gcc 15.0.2). Там компилятор вообще сгенерит немаленький такой код, да ещё и вызывающий встроенную функцию (__paritysi2); это не будет быстро.
Он генерирует вызов функции из поста. Пока что разница в том, что на godbolt он не инлайнится и надо смотреть дальше у себя, если нужна производительность на той платформе. Это же и в других местах повторится, пользы от решения проблем с (?) LTO будет больше, чем велосипедостроения.
Это расширение, а не часть стандарта языка, так что есть случаи, когда использовать такое — не комильфо
Лучше на него сначала наткнуться, GCC и LLVM - это тоже стандарты, которые зачастую важнее бумажного. Хотел сказать, что к тому времени стандарт могут и поправить, но это уже сделали в C23 (__builtin_popcount→stdc_count_ones_ui).
К биту чётности (и, наверное, много где ещё) не хватает предупреждения, что не надо пытаться быть умнее компилятора - он имеет __builtin_parity...__builtin_parityll и знает про Parity-Flag-для-младшего-байта в вашем процессоре и с какой микроархитектуры доступна popcnt. https://godbolt.org/z/qdo7x435f
К ошибке в макросах - что о них всё рассказывают правила SEI CERT C. Что опасно нарушать, что нет, как исправлять - 13 правил.
«dma bypass» (программный метод обхода защитных механизмов).
Лучше часть убрать, она заменяется на printf("%p\n", bar); (или printf("0x%"PRIxPTR"\n", (uintptr_t)bar);) и пропадают ошибки (лишний volatile, sizeof считает размер указателя на буфер, а не буфера, указатель на функцию с такой-то сигнатурой где нужен просто указатель, разбор на отдельные байты сталкивает нас с endianness'ом железа, а так как повсюду little-endian, то выводится неправильно).
И, кажется, его странно желать как новую фичу вместо какого-либо общего механизма. User-defined префиксы/суффиксы к строковым литералам, например.
В D шаблоны могут играть префиксов (some_template!"string literal") и uniform call syntax позволяет записывать вызов функции "как суффикс" ( "string literal".foo() или "string literal".foo с учётом, что "any function can be used like a property").
Ещё более интересные качественные улучшения работы с числами предусмотрены в языке J ... Например, можно записать 5*sqrt(π) как 5p0.5.
Да он, автор оригинала, издевается. Либо это часть мотива "помянуть APL (J - это APL для обычной клавиатуры) каким-нибудь добрым словом, ибо Кеннет Айверсон одним из первых подумал об адаптации языков программирования к работе с массивами".
В APL была ненормальная идея, что всё надо записать в один символ. log - три буквы. ln - две буквы. ⍟ - вот теперь нормально.
Как выглядит подходящий мир для дирижаблей?.. Нужна максимально тяжёлая инертная замена для азота, которая бы ещё не расслаивалась в смеси с кислородом.
Веселее звучит "летали на натуральных оболочках для сосисок". Где-то была карикатура про дефицит сосисок из-за графа Цеппелина. Есть такая статья про запрет сосисок:
A document prepared in 1922 for the US National Advisory Committee for Aeronautics shows just how important cow guts – also known as goldbeater's skins – were to the military effort.
"The collection of the goldbeater's skins was very systematic in Germany during the war," it reads. "Each butcher was required to deliver the ones from the animals he killed. Agents exercised strict control in Austria, Poland and northern France, where it was forbidden to make sausages."
более тонны бомб, самолетам того времени и не снилось
Википедия говорит, что "Илья Муромец" в 1914 мог брать полтонны бомб. С жёсткими дирижаблями вместо бомбардировщиков тогда сильно ошиблись, и Сикорскому ресурсов в России не хватало.
"От сей напасти да защитит церковь жених её" говорит о том, что книга на этих словах кончается, а не о чём-то другом.
а церкви оставалось только уповать на Иисуса.
Казнь через светскую власть - пустая формальность.
Из "Истории инквизиции в средние века" (1888): "Инквизитор Пегна не задумывается признать, что это воззвание к милосердию было пустою формальностью, и объясняет, что к нему прибегали только с той целью, чтобы не казалось, что инквизиторы согласны на пролитие крови, так как это было бы нарушением канонических правил".
Фома Аквинский объяснял, что еретики должны быть преданы смерти. Он лез в дела светской власти (должны вынести такой приговор, а не другой) или указывал на формальность?
церковь могла применять пытки ("в середине XIII века папа Иннокентий IV специальной буллой легитимировал пытки при расследовании ереси")
имелась юридическая лазейка для повторения пыток: "...на второй или на третий день. Здесь может идти речь только о продолжении пытки, а не о повторении её, так как пытка не может быть повторяема" ("Молот ведьм").
церковь могла приговорить к пожизненному заключению
если церковь вдруг засомневается в будущем решении светской власти, она может выбрать пожизненное заключение
И, что характерно, окончательный приговор вынесла и привела в исполнение вполне себе светская власть.
Так это не характерность, а единственный способ приговорить к казни, стандартный. В "Молоте ведьм" под передачей светской власти, кажется, везде подразумевается сожжение. В иных случаях бы дело осталось бы в церковной власти или она бы участвовала дальше: "не передаётся светской власти для смертной казни, но присуждается духовным судьёй к пожизненному заключению".
«...отстраняем тебя от нашего духовного суда и предоставляем тебя светской власти. Но мы нарочито просим светский суд так умерить свой приговор, чтобы тебе не угрожало ни кровопролитие, ни опасность смерти».
И потом проясняется, что дальше следует казнь, а не другое разбирательство, а обнадёживающая формулировка связана с тем, что "духовные судьи не должны сообщать ему, какое наказание ожидает его".
Если в этом видится издевательство, то
вы ещё про апелляции не читали.
После того, как обвиняемый представит письменную жалобу, судья должен сказать, что он ответит через два дня и что для расследования понадобится дней тридцать. Хотя судья сможет тотчас ответить и расследовать дело, если он опытен и знающ, однако, чтобы действовать с большой осторожностью, лучше всего отсрочить расследование на десять, двадцать, двадцать пять или более дней.
Если же судья решит признать доводы апелляции, то он пишет следующее заключение:
«Указанный судья, отвечая на апелляцию, если она вообще заслуживает такого названия, указывает на то, что он действовал справедливо ... » ... «Отсюда очевидно, что судья не оказал никакой помехи подающему апелляцию и не дал ему никакого основания бояться несправедливого ведения дела. Жалоба необоснована и недействительна, потому что она не является следствием помехи обвиняемому защищаться. Следуя законам, ей не надо давать хода. Однако из благоговения перед апостольским престолом...»
Когда же против них начинается процесс, они подают свои апелляции. И другие судьи становятся слабее при исполнении своих служебных обязанностей по искоренению еретиков, так как начинают бояться усталости, как следствия уныния и неприятностей. Всё это весьма вредно отзывается на вере и святой церкви Господней. От сей напасти да защитит церковь жених её.
Это я не понял, поэтому зачеркнул, убрал под спойлер, оставил другое.
Там говорил то, что не имело отношения к делу: если слабый сигнал на фоне сильного пропадает совсем (квантуется в одно и то же значение), то это будет происходить и без сильного сигнала.
Если гул будет тихий, он и промодулирует не очень сильно.
Низкочастотный гул, который на 40 дБ(А) тише другого звука, по мощности он может с ним совпадать (т.е. промодулирует сильно) - у уха слабая чувствительность на низких частотах.
Хм, в случае простого R-2R он даже не нужен. Из-за однополярного питания слабые сигналы смещаются в середину диапазона ЦАП (-1 → 2^15-1; 0 → 2^15) - то есть они будут вызывать переключение всех битов и собирать ошибку всех резисторов...
Картинка
Резисторы с точностью выше 1% были отправлены на производство резисторов с точностью выше 1%.
- Так не восемь, а шестнадцать же [резисторов для 8-битного ЦАП] - Шестнадцать [бит] не получился - Шестнадцать бит не нужны На старших битах допустима пониженная точность (как если бы использовалось неравномерное квантование или компандер).
Нет, вместо выстрела может оказаться, например, низкочастотный гул. Его будет почти неслышно (там низкая чувствительность слуха), но он промодулирует всё остальное. Поэтому нужна абсолютная точность, не относительная.
Первоначальный ответ на зачёркнутое
Но вообще-то нужны.
В вашем примере взять условные 6 бит, убрать выстрел, оставить комара - он всё равно пропадёт. Потому что это фиксированные 6 бит, а не отмасштабированные на текущую максимальную громкость - для этого пришлось бы модулировать напряжение питания ЦАП (по аналогии с модулированием подсветки в LCD HDR-экранах).
Затем заменить выстрел на мощный низкочастотный гул - почти не слышно (чувствительность уха там низкая), но почти весь диапазон ЦАП занимает. Все остальные звуки теперь плавают на амплитуде этого гула - поэтому в звуке нужна абсолютная точность, а не относительная. Точность на максимальных значениях нужна такая же как около нуля, потому что слабый звук может находиться где угодно.
Поэтому в графике нормально понижать точность на больших значениях (применять гамму), а звуке аналог гаммы (mu-law / A-law) - это старый плохой компромисс, а не норма.
Ещё с частотной стороны (вместо временной). Нехватка разрядности - нелинейные искажения - плохо звучит (ступеньки между дискретными значениями - это как добавить треугольную "пилу" к исходному сигналу). Ситуация улучшается дизерингом, нелинейные искажения пропадают и теперь даже звуки тише 1 младшего разряда сохраняются (избавились от известного недостатка цифрозвука по сравнению с аналогом), но добавляется постоянное шипение (вместо пилы), 16 бит всё равно нужны, чтобы опустить шипение ниже порога слышимости.
"Слыхал про напыление алюминия" абсурдно, потому что вакуумное напыление алюминия везде. Еда в пакетиках (если они блестят внутри). Фольгированные воздушные шарики. Спасательные одеяла. Последние годятся: youtube, rcgroups.
Какие именно покрытия и утечки в настоящих дирижаблях - без понятия. Гугл подсовывает что-то, но это scribd.
NASA противопоставляла vacuum metallizing и sputtering по эффективности - от первого мало пользы.
У любителя много других проблем с оболочками будет. Герметичность и вес швов, поиск утечек в них, ассортимент ("такую же, но на 10 микрон тоньше..."), квадрат-куб везде (меньше аэростат => больше вес оболочки относительно подъёмной силы; утечка 1% в год на 150к кубометрах превращается в 10% в месяц на 0.1 кубометре).
Меня под прошлой частью впечатлило: "Слыхал про напыление алюминия на баллон, но пока тихо в сети, нет, похоже, ничего достойного". Металлизированным плёнкам больше 50 лет, они повсюду!
С гелием всегда так, что он очень текуч, но оценок с точностью хотя бы плюс-минус десять раз не назовут.
Airlander 10 reportedly loses about 1 cubic meter [из 38000] of helium every day through effusion - коммент на реддите
Он генерирует вызов функции из поста. Пока что разница в том, что на godbolt он не инлайнится и надо смотреть дальше у себя, если нужна производительность на той платформе. Это же и в других местах повторится, пользы от решения проблем с (?) LTO будет больше, чем велосипедостроения.
Лучше на него сначала наткнуться, GCC и LLVM - это тоже стандарты, которые зачастую важнее бумажного. Хотел сказать, что к тому времени стандарт могут и поправить, но это уже сделали в C23 (
__builtin_popcount→stdc_count_ones_ui).Если гнаться за непротиворечивостью, то
char const * s1, чтобы тип легко читался (указатель на... const... char).Но непротиворечивость - это не про Си и у неё есть цена.
Цена непротиворечивости в D, наглядно (размерность читается справа налево, а индексы слева направо).
К биту чётности (и, наверное, много где ещё) не хватает предупреждения, что не надо пытаться быть умнее компилятора - он имеет __builtin_parity...__builtin_parityll и знает про Parity-Flag-для-младшего-байта в вашем процессоре и с какой микроархитектуры доступна popcnt. https://godbolt.org/z/qdo7x435f
К ошибке в макросах - что о них всё рассказывают правила SEI CERT C. Что опасно нарушать, что нет, как исправлять - 13 правил.
Нет, это
Лучше часть убрать, она заменяется на
printf("%p\n", bar);(илиprintf("0x%"PRIxPTR"\n", (uintptr_t)bar);) и пропадают ошибки (лишний volatile, sizeof считает размер указателя на буфер, а не буфера, указатель на функцию с такой-то сигнатурой где нужен просто указатель, разбор на отдельные байты сталкивает нас с endianness'ом железа, а так как повсюду little-endian, то выводится неправильно).И, кажется, его странно желать как новую фичу вместо какого-либо общего механизма. User-defined префиксы/суффиксы к строковым литералам, например.
В D шаблоны могут играть префиксов (
some_template!"string literal") и uniform call syntax позволяет записывать вызов функции "как суффикс" ("string literal".foo()или"string literal".fooс учётом, что "any function can be used like a property").Да он, автор оригинала, издевается. Либо это часть мотива "помянуть APL (J - это APL для обычной клавиатуры) каким-нибудь добрым словом, ибо Кеннет Айверсон одним из первых подумал об адаптации языков программирования к работе с массивами".
В APL была ненормальная идея, что всё надо записать в один символ.
log- три буквы.ln- две буквы.⍟- вот теперь нормально.Как выглядит подходящий мир для дирижаблей?.. Нужна максимально тяжёлая инертная замена для азота, которая бы ещё не расслаивалась в смеси с кислородом.
Веселее звучит "летали на натуральных оболочках для сосисок". Где-то была карикатура про дефицит сосисок из-за графа Цеппелина. Есть такая статья про запрет сосисок:
Из карикатур на дирижабли(?)-сосиски сейчас такое гуглится
Американцы с 1921 летали на гелии. Просто у них он был, а у других - нет.
Википедия говорит, что "Илья Муромец" в 1914 мог брать полтонны бомб. С жёсткими дирижаблями вместо бомбардировщиков тогда сильно ошиблись, и Сикорскому ресурсов в России не хватало.
Угу, из неудачного супероружия в WW1 ещё был царь-танк, недостроенные сверхтяжёлые танки K-Wagen, парижская пушка...
Боромир предложил бы и сложить два указателя...
"От сей напасти да защитит церковь жених её" говорит о том, что книга на этих словах кончается, а не о чём-то другом.
Казнь через светскую власть - пустая формальность.
Из "Истории инквизиции в средние века" (1888): "Инквизитор Пегна не задумывается признать, что это воззвание к милосердию было пустою формальностью, и объясняет, что к нему прибегали только с той целью, чтобы не казалось, что инквизиторы согласны на пролитие крови, так как это было бы нарушением канонических правил".
Фома Аквинский объяснял, что еретики должны быть преданы смерти. Он лез в дела светской власти (должны вынести такой приговор, а не другой) или указывал на формальность?
церковь могла применять пытки ("в середине XIII века папа Иннокентий IV специальной буллой легитимировал пытки при расследовании ереси")
имелась юридическая лазейка для повторения пыток: "...на второй или на третий день. Здесь может идти речь только о продолжении пытки, а не о повторении её, так как пытка не может быть повторяема" ("Молот ведьм").
церковь могла приговорить к пожизненному заключению
если церковь вдруг засомневается в будущем решении светской власти, она может выбрать пожизненное заключение
дело происходит не в светской стране
Так это не характерность, а единственный способ приговорить к казни, стандартный. В "Молоте ведьм" под передачей светской власти, кажется, везде подразумевается сожжение. В иных случаях бы дело осталось бы в церковной власти или она бы участвовала дальше: "не передаётся светской власти для смертной казни, но присуждается духовным судьёй к пожизненному заключению".
Там можно такие интересные формулы прочитать:
И потом проясняется, что дальше следует казнь, а не другое разбирательство, а обнадёживающая формулировка связана с тем, что "духовные судьи не должны сообщать ему, какое наказание ожидает его".
Если в этом видится издевательство, то
вы ещё про апелляции не читали.
Это я не понял, поэтому зачеркнул, убрал под спойлер, оставил другое.
Там говорил то, что не имело отношения к делу: если слабый сигнал на фоне сильного пропадает совсем (квантуется в одно и то же значение), то это будет происходить и без сильного сигнала.
Низкочастотный гул, который на 40 дБ(А) тише другого звука, по мощности он может с ним совпадать (т.е. промодулирует сильно) - у уха слабая чувствительность на низких частотах.
Хм, в случае простого R-2R он даже не нужен. Из-за однополярного питания слабые сигналы смещаются в середину диапазона ЦАП (-1 → 2^15-1; 0 → 2^15) - то есть они будут вызывать переключение всех битов и собирать ошибку всех резисторов...
Картинка
Резисторы с точностью выше 1% были отправлены на производство резисторов с точностью выше 1%.
- Так не восемь, а шестнадцать же [резисторов для 8-битного ЦАП]
- Шестнадцать [бит] не получился
- Шестнадцать бит не нужныНа старших битах допустима пониженная точность (как если бы использовалось неравномерное квантование или компандер).Нет, вместо выстрела может оказаться, например, низкочастотный гул. Его будет почти неслышно (там низкая чувствительность слуха), но он промодулирует всё остальное. Поэтому нужна абсолютная точность, не относительная.
Первоначальный ответ на зачёркнутое
Но вообще-то нужны.
В вашем примере взять условные 6 бит, убрать выстрел, оставить комара - он всё равно пропадёт. Потому что это фиксированные 6 бит, а не отмасштабированные на текущую максимальную громкость - для этого пришлось бы модулировать напряжение питания ЦАП (по аналогии с модулированием подсветки в LCD HDR-экранах).
Затем заменить выстрел на мощный низкочастотный гул - почти не слышно (чувствительность уха там низкая), но почти весь диапазон ЦАП занимает. Все остальные звуки теперь плавают на амплитуде этого гула - поэтому в звуке нужна абсолютная точность, а не относительная. Точность на максимальных значениях нужна такая же как около нуля, потому что слабый звук может находиться где угодно.
Поэтому в графике нормально понижать точность на больших значениях (применять гамму), а звуке аналог гаммы (mu-law / A-law) - это старый плохой компромисс, а не норма.
Ещё с частотной стороны (вместо временной). Нехватка разрядности - нелинейные искажения - плохо звучит (ступеньки между дискретными значениями - это как добавить треугольную "пилу" к исходному сигналу). Ситуация улучшается дизерингом, нелинейные искажения пропадают и теперь даже звуки тише 1 младшего разряда сохраняются (избавились от известного недостатка цифрозвука по сравнению с аналогом), но добавляется постоянное шипение (вместо пилы), 16 бит всё равно нужны, чтобы опустить шипение ниже порога слышимости.
Ну, если отделить мух от котлет:
"Слыхал про напыление алюминия" абсурдно, потому что вакуумное напыление алюминия везде. Еда в пакетиках (если они блестят внутри). Фольгированные воздушные шарики. Спасательные одеяла. Последние годятся: youtube, rcgroups.
Какие именно покрытия и утечки в настоящих дирижаблях - без понятия. Гугл подсовывает что-то, но это scribd.
NASA противопоставляла vacuum metallizing и sputtering по эффективности - от первого мало пользы.
У любителя много других проблем с оболочками будет. Герметичность и вес швов, поиск утечек в них, ассортимент ("такую же, но на 10 микрон тоньше..."), квадрат-куб везде (меньше аэростат => больше вес оболочки относительно подъёмной силы; утечка 1% в год на 150к кубометрах превращается в 10% в месяц на 0.1 кубометре).
NASA про покрытия в 1971
Меня под прошлой частью впечатлило: "Слыхал про напыление алюминия на баллон, но пока тихо в сети, нет, похоже, ничего достойного". Металлизированным плёнкам больше 50 лет, они повсюду!
С гелием всегда так, что он очень текуч, но оценок с точностью хотя бы плюс-минус десять раз не назовут.
Это около 1% в год.
[*]
** Wolfram Alpha
Без веса самого контейнера честнее. В тот Боинг он вообще не поместится.