Суперчеловек - убийца супермутантов
 
[Most Recent Entries] [Calendar View] [Friends View]

Sunday, May 7th, 2017

    Time Event
    11:03a
    А представлениями в компьютере я заинтересовался после того, как пытался разобраться с хаскеловским генератором псевдослучайных чисел, и наткнулся на такое место:

    -- We want a non-negative number, but we can't just take the abs
    -- of sMaybeNegative as -minBound == minBound.
    s = sMaybeNegative .&. maxBound

    Вот и решил разобраться глубже и переизобрести signed magnited и дополнительный код. Как bigint-ы, но имея в виду и fixed-width. Теперь эта тема настолько заинтересовала, что нужно будет и дальше её развивать (схемотехника, калькуляторы, negabinary).

    Ну, а снипет сверху уже очевиден. Не знал, однако, но действительно, abs(INT_MIN) = INT_MIN: в си и подобных языках модуль этого отрицательного числа даёт его же, и теперь очевидно, почему.

    В новом стандарте си даже SCHAR_MIN декларируется как -127, а не -128. Впрочем, вряд ли хоть один компилятор реализует это так (ну, может, олдовые компиляторы на мейнфреймы с обратным кодом). И остальные ..._MIN-ы аналогично, и все рэнджи на 1 меньше, чем в реальности. Вот уж представляю, какие проблемы начнутся в прогах, если их "правильным" си компилить.

    Пробежался по 50+ файлам limits.h у меня на диске: все определяют как -128 и т.п. Ничо себе у меня си-компиляторов накопилось, оказывается. Даже по AVR затесался один.

    << Previous Day 2017/05/07
    [Calendar]
    Next Day >>

About LJ.Rossia.org