каков формат хранение вещественных чисел

Тема в разделе "WASM.BEGINNERS", создана пользователем dead_body, 24 июн 2006.

  1. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    каков формат хранение вещественных чисел?

    есть число.

    memreal на 64 бита.

    надо узнать целое ли оно.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Статьи о fpu на сайте.
     
  3. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    прочитал, спасибо.

    понял, что:

    порядок 11 бит, а мантисса 52 бита.(64 бита, если)

    то есть что бы получить число надо мантиссу * 10^порядка.

    а потом сравнить, что то.Но ведь это долго будет сильно.



    а по короче путь есть? А то надо узнать остаток от деления двух memint64, а для этого приходиться ложить всё в ФПУ, делить, вылаживать из ФПУ, приводить в нормальный вид, а потом сранивать.(да и то не сильно ясно как, привести и сравнить).
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    О формате см. IA-32, часть 1

    Узнать целое ли число проще с помощью FPU, чем разбирать битовые поля на АЛУ
    Код (Text):
    1.   fld num
    2.   fld st0
    3.   frndint          ;округляем до целого
    4.   fcomip st0,st1   ;сравниваем
    5.   fstp st0
    6.   jz IsInt
    А если на АЛУ, то нужно

    1) сделать проверку 64-бит на 0 (если да, то на выход)

    2) определить несмещенный порядок и сравнить с 0 (если меньше, то на выход)

    3) проверить 52 минус порядок младших бит - если все нули, то целое
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    /off

    Что-то не нашёл, как получить остаток от деления в FPU.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    IceStudent

    А где искал то ? :)

    Во-первых, есть тормозная инструкция FPREM, вычисляющая значение st0 = st0-trunc(st0/st1)*st1

    Во-вторых, можно тоже самое проделать быстрее ручками. Тут единственное неудобство - по умолчанию стоит режим округления до ближайшего целого, а тут нужно округлять вниз, поэтому приходится либо перезагружать управляющий ворд (FNSTCW+FLDCW х2), либо добавлять анализ на больше\меньше