wizzard: (Default)
[personal profile] wizzard

128 and 256-bit, respectively ^^

Date: 2009-10-16 09:45 am (UTC)
From: [identity profile] insooo.livejournal.com
Любой тип данных\код, который использует int, использует его интерпретацию основанную на его представлении. Представление для конкретной архитектуры фиксировано и хорошо известно, включая диапазон значений. two's-complement 32 bit signed integer это представление. Интерпретаций естественно может существовать бесконечное множество.

My point is, если хочется ограничивать диапазон допустимых значений, то нужно ограничивать диапазон интерпретаций, а не влиять на представление. Проще говоря если понимать int *меньше* numberBits *больше* как попытку сделать представление в битах определенной длинны, то это либо бред, либо misleading из-за названия типа и параметра типа. =P

Date: 2009-10-16 10:11 am (UTC)
From: [identity profile] zhengxi.livejournal.com
В один байт компилятор/JIT может захуячить структуру вроде:
{
int<1..5> a;
int<1..5> b;
int<0..9> c;
}
А может и 3 DWORD'а сделать, смотря что эффективней
это не сделать только задавая длину поля в битах

Date: 2009-10-16 10:56 am (UTC)
From: [identity profile] insooo.livejournal.com
Примерно по этим же самым причинам битовые поля считаются плохо переносимыми, а им уже много лет. Упаковка нескольких чисел в один байт с нефиксированными границами внутри сведет с ума процессор на ALU. Ну и делать представление базового типа зависящим от чего-то кроме платформы это кошмар.

Date: 2009-10-16 10:13 am (UTC)
From: [identity profile] zhengxi.livejournal.com
ну и заданные програмистом range дают больше информации для статического анализа и обнаружения ошибок на этапе компиляции

Date: 2009-10-16 10:54 am (UTC)
From: [identity profile] insooo.livejournal.com
На этапе компиляции такие ошибки можно обнаружить при присваивании значений известных опять же на этапе компиляции. Остальные ошибки такого рода все равно придется решать в рантайме, а их именно так и решают сейчас, когда *интерпретация* инта не совпадает с требуемым диапазоном\набором значений.

Другое дело что тогда выброс исключения\assert\what-you-have будут локализованы, но ни что не мешает написать приблизительно тоже самое сейчас в виде типа данных с контрактом на изменение значения представленное базовым интом.

Date: 2009-11-28 11:39 pm (UTC)
From: [identity profile] udpn.livejournal.com
Ни разу не видел кода на С++ вроде

range<0, 255> a;
range<-10, 10> b;
a += b; // Error: Range check failed

хотя его довольно просто написать. Быть может, это никому не нужно?

ps Какбы намекну, что множество всех предикатов значительно мощнее множества предикатов вида P = {a <= x <= b}.

Date: 2009-11-29 12:54 am (UTC)
From: [identity profile] zhengxi.livejournal.com
Просто чекать range даже мне не нужно :)
А выбирать storage type (сколько бит выделять) в зависимости от ranges и результатов операций над ними - было бы не плохо.

Profile

wizzard: (Default)
wizzard

January 2019

S M T W T F S
  12 345
6789101112
1314 1516171819
202122 23242526
2728293031  

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 31st, 2025 05:40 pm
Powered by Dreamwidth Studios