SSE/SSE2 для работы с float

Тема в разделе "LANGS.C", создана пользователем anaumov, 16 мар 2012.

  1. anaumov

    anaumov New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2012
    Сообщения:
    1
    Добрый день.

    Подскажите пожалуйста какие механизмы есть для повышения точности вычислений с типом float.
    И как вообще можно оптимизировать код на С с целью более точной работы с float?

    Заранее спасибо
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Точность float вы не повысисите ни каким образом. Но можете использовать double вместо float.
     
  3. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    Кстати, на сколько я понимаю, вычисления с float в SIMD регистрах (SSE), намного менее точны (обладают большей погрешностью), чем те-же самые вычисления в FPU регистрах? 32-bit vs 80-bit..

    Имеется ввиду, когда и там и там, в качестве исходного числа, используется float
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    kweed
    Нет точность такая же просто вероятность появления ошибки ниже.
     
  5. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    Pavia
    Понятно, но в общем это к тому, что возможно не всегда стоит "оптимизировать" код с помощью SEE.. (если дело касается чисел с плавающей точкой)
     
  6. Smile

    Smile New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2004
    Сообщения:
    129
    Хотел ее использовать но не пришлось, вроде быстрая, такими пользуются математики всякие.

    Есть еше decimal floating point это чтобы деньги без потерь считать.

    В lisp кстати есть поддержка дробных чисел, если 1/3 то оно не преврашается в 0.33333333333, и вроде там нету периода и ошибки с округлением поэтому.

    Код (Text):
    1. CL-USER 1 > (+ 4/3 1/3)
    2. 5/3
    3. CL-USER 3 : 1 > (+ 5/3 0.5)
    4. 2.1666665
    Код (Text):
    1. double f = (5 / 3.0) + 0.5; // 2.1666666666666670
    2. printf("f = %llf",f); // f = 2.166667
    В lossless звуковых кодеках flac,vorbis еше пользуются какой-то магией без ошибок в float, но я их исхоники не смотрел.