извлечение корня

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 8 Nov 2011.

  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    Привет всем. в общем нашел функцию извлечения корня квадратного,но мне не совсем понятна ее работа
    вот собсно функа:
    Code:
    function sqrt(x: cardinal): integer;
    asm
    bsr edx, eax 
    jz @exit
    
    mov ecx, edx 
    test ecx, 1 
    
    jz @even 
    @odd:
    
    shr ecx, 1
    inc ecx
    shr eax, cl
    mov edx, 1
    shl edx, cl
    shr edx, 1
    add eax, edx
    
    mov edx, $B504F334 
    mul edx
    mov eax, edx
    
    ret
    @even:
    
    shr ecx, 1
    inc ecx
    shr eax, cl
    mov edx, 1
    shl edx, cl
    shr edx, 2
    add eax, edx
    
    @exit:
    end;
    если можно откоментите.я так понял тут манипуляции с битами происходят.
    и еще одно,подскажите какие знаете еще функции для извлечения корня без использования вычислений с плавающей точкой.была идея возводить число в степень 1\2, но как я понял без подключения арифметического сопроцессора это не получится.
     
  2. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    в общем основы:
    степень любого числа можно представить как сумму различных степеней двойки
    Code:
    3^2 = 8 + 1 = 2^3 + 2^0
    9^2 = 64 + 16 + 1 = 2^6 + 2^4 + 2^0
    
    и т д

    это все что нужно для понимания этого кода.
    shr и shl сдвигают число на 1 байт направо/налево. Это равноценно ПРИМЕРНОМУ делению или умножению числа на 2.

    p.s тот кто пишет на асме, не ищет легких путей. Вникай и удачи.
     
    #2 awdrg, 8 Nov 2011
    Last edited: 8 Nov 2011
  3. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    хм.а что за число B504F334?
     
  4. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    спроси у автора кода, либо вникай сам)
     
  5. Mr.Snuffer

    Mr.Snuffer Member

    Joined:
    2 Jul 2010
    Messages:
    140
    Likes Received:
    13
    Reputations:
    0
    16тиричная система, не?
     
  6. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    о спасибо,я не знал:)я спрашиваю что оно там делает.походу это 2 в степени.
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    http://hal.inria.fr/ensl-00335792/PDF/JeKnMoRe09-ieeeTC-revision.pdf
     
    _________________________
  8. awdrg

    awdrg Member

    Joined:
    30 Jan 2009
    Messages:
    195
    Likes Received:
    31
    Reputations:
    1
    ниразу. возможно алгоритм какой то другой, это вообще отрицательное число.
     
  9. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    там стоит комент что это 2^32, но посмотрев в dec сис-ме я увидел другое число.