Туплю с Fixed & Float Point

Тема в разделе "WASM.BEGINNERS", создана пользователем Arthur, 22 апр 2007.

  1. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Приветствую!
    Вот блин не как не даходит до меня форматы фиксированных точек (16:16) и плавающих.

    1. Фиксированная точка:
    Ни как не могу дапетрить в каком формате находится дробная часть.
    Почитал книгу, и не фига не понял:
    1080h - 16,5: Целая часть понятна, а вот дробная в десятичной равно 128.
    1240h - 18,25: В десятичной 64
    Но здесь используется формат 8:8, а мне нужен 16:16.

    2. Плавающая точка:
    Че тама за мантисса?
    а экспонента че такое?
    пишу: pfloat dd 10.10
    rfloat dd 13.18
    получаю:
    10.10 = 4121999Ah
    13.18 = 4152E148h
    Где тут целая? Дробная?

    Кто нить двоичнику может обьяснить по русски?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    число = мантисса * ( 10 ^ экспонента )
    (^ - возведение в степень)
     
  3. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Насчет первого -
    попробуй числа поделить на 256 - удивишься ;)

    Насчет второго
    само число представляется в виде X*2^Y
    оно нормализовано (т.е старший разряд X должен быть 1)
    мантисса - само число (X)
    экспонента - это степень числа (Y)
    А вообще насчет вещественных чисел смотри стандарт IEEE
     
  4. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Ultrin Faern
    Насчет первого - удивился! :) 0,5 :) А я все думал че надо та делать. 256 это максимум что может быть в одном байте. Понятно! Спасибо!

    Great и Ultrin Faern так какая формула (10 ^ экспонента) или (2 ^ экспонента)?

    Ultrin Faern
    А ссылочку не дадите?
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Arthur
    Всё предельно просто фиксированная точка означает, что количество знаков после запятой у тебя задано тобой одинаковым для всех твоих чисел, например можешь все "входящие" числа умножать на 100, а готовые делить на 100 и будет тебе фиксированная точка с 2мя десятичными разрядами. Но лучше работать с двоичной арифметикой, т.е. умножение деление заменить двоичными сдвигами влево - вправо на нужное тебе число разрядов например 16, хотя в схеме 24:8 сдвиг на 8 (24 бита целая часть, 8 бит дробная)

    в записи dd 13.18e5 число 5 это 10 ^ экспонента, но у hex числа которое скомпилируется асмом, и будет реально использоваться в FPU уже 2 ^ экспонента
     
  6. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    По форматам IEEE
    нагуглил навскидку -
    http://pascal.sources.ru/datatype/floatype.htm
    http://en.wikipedia.org/wiki/Floating_point
    прикольная статья -
    http://yur.ru/science/computer/IEEE754.htm

    ЗЫ - Но вообще у меня дома книжка по целочисленной\плавающей арифметике - там все разжеванное...
     
  7. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Кстати, по поводу прикольной статьи -
    вначале автор утвеждает, что человечество использует максимум 10 знаков после запятой и 5 до, НО затем выбирает пример с векторами 10^40 степени... ;) Гы!
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Ultrin Faern
    Имелось ввиду 10 _значащих_ цифр. Да и то такая точность редко когда нужна и при машинном счёте последним нескольким разрядам верить всё равно нельзя (это зависит от используемого алгоритма счёта)
     
  9. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Угу
    10^40+2000 - тут 10 значащими цифрами и не пахнет :Р