sin

Тема в разделе "WASM.ZEN", создана пользователем asmfan, 3 апр 2007.

  1. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Выполните у себя такой код
    Код (Text):
    1.         fninit
    2.         fldpi
    3.         fsin
    и посмотрите результат в отладчике.
    // Резултат в идеале должен быть = 0 (zero), но увы и ах...
    Какие по вашему мнению факторы повлияли на результат? Алгоритм синуса? Число пи "фальшивое"? что еще?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Просто далеко не точное - 80 бит всего лишь, ведь больше в ФПУ и не влезет.
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    просто тот же самый пи пополам считается как 1.0 т.е. точно, а это... безобразие)
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    asmfan
    Просто одна неточность компенсируется другой ;)
     
  5. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Quantum )))
    5+
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    гейзенберг :)
    в численных методах незначительноя погрешность, это нормально.
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Quantum
    Как раз Пи - 160 бит, поэтому меня всегда умиляет когда HLL не умеют использовать FLDPI и требуют набивать его вручную :))

    asmfan
    А вот трансцендентные функции типа FSIN имеют полное право возвращать "не совсем точный" результат, о чём умный камешек сообщает установкой флага PE в SW.
    Сохрани результат как real4 или real8 и всё будет ок :))
    Собственно для этого и придуманы short, double и extended, чтобы можно было "точные" вычисления вести в 80 битке, а затем отбрасывать накопившуюся погрешность округлением к short или double.