Целочисленная или плавающая арифметика

Тема в разделе "WASM.ASSEMBLER", создана пользователем trurl, 24 июн 2005.

  1. trurl

    trurl New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    7
    Адрес:
    Ukraine
    Доброго времени суток

    Я с другом делаю трехмерный движок, на текущий момент софтварный, мы используем арифметику с плавающей запятой (fpu, сопроцессор по-нашему). Есть ли смысл переходить на целочисленную арифметику? Будет ли прирост в производительности от этого?
     
  2. Dart_Bobr

    Dart_Bobr New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    100
    Адрес:
    Ukraine
    ИМХО смысла переходить к целым числам нету. Ведь неспроста все графичиские апишки юзают дробную арифметику. Ощутимого прироста в производительности скорее всего не будет(а откуда ему взяться), а вот универсальность потеряется.
     
  3. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    На мой личный взгляд, смысл есть.
     
  4. zobot1

    zobot1 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2005
    Сообщения:
    55
    на мой взгяд грамотный подход и int + fixed point творят чудеса :)
     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    имею опыт рисования синусоиды. из-за того что я пропускал занятия по паскалю, я не знал как из float получить int, а домашнее задание было ее нарисовать. сбацал табличным методом. зато у других прорисовало по пол-часа при изменении коэффициентов, а у меня растягивалась/сжималась в режиме реального времени - препадша обалдела 8) а всего-то: таблица синусов от 0 до 90, умноженных на 32768, с дискретностью 1 градус. делил на 32768 я естественно сдвигом на 1 :)
     
  6. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    хм, это последняя новость математики ? Раньше так только на два делили/умножали...
     
  7. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    отсутствие математического образования иногда полезно :)

    [​IMG] 1395395369__sinus.zip
     
  8. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    да, кстати, только что попробовал - чтобы работало нужно рид-онли с файлов сбросить (архивировал с компакта)
     
  9. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    shoo

    А у меня в свое время небыло даже таблички синусов. Пришлось алгоритм придумывать, что впрочем времени много не заняло. Алгоритм получился любопытный - через деление пополам, но и его пришлось оптимизировать с помощью таблички. На входе подавалось 16-битное число (т.е. от 32767 до 32768), на выходе получалось значение его синуса (float 80-битное). Старшие два бита параметра при этом идентифицировали "четверть" окружности, а оставшиеся 14 делили эту четверть на 16384 секторов.



    Алгоритм:

    В начале беруться две точки A и B, приходящиеся соответственно на Pi/2 и 0 радиан, на окружности условной четверти круга . Находится средняя точка C, вычисляется расстояние l (от 0 до C), после чего координаты C (Cx и Cy) деляться на это l, что дает координаты точки D (Dx и Dy). Получается что сектор AOB разделен пополам, теперь в зависимости от бита n (изначально старшего, т.е. = 14) выбирается какой станет точкой в следующей итерации (A или B), точка D.

    /forum/img/attach.gif] [url=http://www.wasm.ru/forum/files/1821571853__alg.png]1821571853__alg.png[/url]

    <img src="http://www.wasm.ru/forum/files/1821571853__alg.png
     
  10. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Хм. Баг в движке форум похоже - предыдущий мой пост редактируется вместе с содержимым страницы, но при этом отсуствует кнопка "Правка". Видать большое обилие BBcode мешает.
     
  11. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    у меня было в голове готовое решение - я его придумал еще когда фортом увлекался - форт, как известно, изначально был целочисленный. к тому же у меня в машине не было математического сопроцессора, поэтому я им никогда и не пользовался. выбирать нужно исходя из требуемой точности.
     
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Целочисленные вычисления в графике сакс & мастдай. Как и фиксед поинт. Флоатпоинт рулит и рулить будет.
     
  13. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    _DEN_

    а вот и не фига!!! 16.16 оч даже хорошо юзается там где большая точность не нужна или 8.24 это стоит юзать там где это возможно скорость просто офигенная. а вот если у тебя амд64 то 32.32 сам бог велел. это стоит юзать везде геде это можно втыкнуть.
     
  14. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    doctor_Ice



    Ну-ну. Давай, юзай свой фиксед. Удачи.
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    doctor_Ice



    Ну-ну. Давай, юзай свой фиксед. Удачи.
     
  16. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    Флоат вычислания, не годятся для очень точных вычислений и в тех случаях когда требуется высокая скорость, в этих случаях фиксед рулит.
     
  17. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    флоат это копромис скорости и точности
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    При чем тут точность? 32.32 точнее флоата, и что? О диапазоне значений кто-нибудь подумал? 32.32 дает [-2*10^9 ; 2*10^9] А тот же 32 float дает диапазон порядка 2^256
     
  19. zobot1

    zobot1 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2005
    Сообщения:
    55
    отсуда мораль - в зависимости от задачи подбираются методы решения. Чтобы крутануть 3д-говнолёт достаточно фикседа, а чтобы говнолёт в реальном космосе крутануть там и флота имхо не особо хватает.



    Хой.
     
  20. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    _DEN_

    Что тебе мешает взять n двордов для создания той точности которая тебе необходима? Причем это будет действительно точно, в отличие от флоат.