История изменений
Исправление firkax, (текущая версия) :
Вычисляю машинное эпсилон и не получается для 128-битной плавучки его правильно отобразить.
glibc printf может и не поддерживать. В мане нету например. А даже если будет поддерживать - то несовместимо с другими libc. Напиши свой (печатаешь цифру слева от точки, вычитаешь её, умножаешь на 10 и так по циклу).
Понятно, ноль там для __float128 быть не может, это результат какого-то округления при выводе.
Скорее всего не округления даже, а не того типа. Он там ждёт double и интерпретирует полученный байты как double, а ему дают __float128 и хорошо если в том же регистре/месте памяти а не в другом.
Что интереснее, для расчета всегда используется x87-й блок, даже если -mfpmath=sse -msse2
Потому что sse не поддерживает этот тип (у х87 есть три типа: одиночной, двойной и расширенной точности).
3. Для __float128 всегда используется sse2, даже если указано -mfpmath=387
Аналогично, х87 не поддерживает его. Насчёт того как он вообще работает не знаю, мне казалось что предел точности sse это double.
Не понял, как можно заставить использовать avx и avx2
-mfpmath=avx какое-нить?
Исходная версия firkax, :
Вычисляю машинное эпсилон и не получается для 128-битной плавучки его правильно отобразить.
glibc printf может и не поддерживать. В мане нету например. А даже если будет поддерживать - то несовместимо с другими libc. Напиши свой (печатаешь цифру слева от точки, вычитаешь её, умножаешь на 10 и так по циклу).
Что интереснее, для расчета всегда используется x87-й блок, даже если -mfpmath=sse -msse2
Потому что sse не поддерживает этот тип (у х87 есть три типа: одиночной, двойной и расширенной точности).
3. Для __float128 всегда используется sse2, даже если указано -mfpmath=387
Аналогично, х87 не поддерживает его. Насчёт того как он вообще работает не знаю, мне казалось что предел точности sse это double.
Не понял, как можно заставить использовать avx и avx2
-mfpmath=avx какое-нить?