Определить пересечение

Тема в разделе "WASM.A&O", создана пользователем PavPS, 7 мар 2007.

  1. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    Всем привет!

    Задача банальна и проста: определить пересечение ч/з ноль.

    1)
    Дан массив данных, точнее он постоянно поступает. Значение в пределах int32.
    требование за минимальное кол-во времени (наиболее быстро)
    определить переход ч/з ноль.
    Не использовать много памяти. Сигнал случайный. может попастся 2 и более нулей подряд.

    2)
    те же критерии, но переменные типа float

    Заранее благодарен
    ---===PavPS===---
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Не понял.. просто следить за изменением знака чисел не катит?
     
  3. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    ты не поверищь, катит, но знаки надо где-то сохранять,
    пот 1 23 5 0 0 -1 -2 6
    все эти числа поступают отдельно при каждом новом вызове, так сказать процедуры
    , но хранить их ВСЕ в памяти слишком много - это расход памяти раз, скорость чтения записи два,
    и самое главное как быстро сравнить знаки. sign и if a*b < 0 then не предлагать. :)
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Сохранить знаковый бит в памяти только. Сверять знаковый бит текущего числа и записанный (предыдущего). Если поменялось - танцуем
     
  5. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    хароршо, для целых знаковый бит выковырять легко :) вобщем то пододит.
    а как быть с флотами? как оттуда быстро извлечь знак?
     
  6. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    хранить предыдуще число где-нибудь.
    пусть var - предыдущее число - память или регистр
    eax - данное

    or eax,eax
    je exit
    xor eax,var
    jns @1 ;знак не сменился
    ... ;знак сменился
    @1:
    mov var,eax
    exit:
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    У них тоже знаковый бит есть. Самый старший
     
  8. PavPS

    PavPS New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2004
    Сообщения:
    109
    Адрес:
    Russia
    спасибо.