Прогноз погоды

Блог

Показаны все темы: 4 RSS друзей

gcc и работа с вещественными числами

Здесь я рассказал о странной причуде языка C, с которой столкнулся в своей практике. В данной теме попытаюсь описать ещё об один "косяк", который может привести к некорректному результату, когда надеешься на правильную работу кода.

Итак, имеем следующий код:

#include <stdio.h>
int main()
{
    float a = 1.005, b = 1000;
    int c = a*b;
    printf("%d\n", c);
    return 0;
}

Компилируя этот код gcc 4.1.1, получаю 1004. Возникает вопрос - откуда такой странный результат? Даже это

int c = (float)(a*b);

также не даёт правильного результата. Оказалось, что старый стандарт языка C C89 ничего не регламентировал о способах работы с вещественными числами. Да ещё когда появилось расширение SSE, компиляторы начали считать смешенным образом - как посчитается быстрее, что-то на FPU, что-то на SSE.

В новом стандарте языка C C99 появилась некоторая определенность. Компилятор должен выставить значение макроса FLT_EVAL_METHOD (заголовочный файл float.h) в 0, 1, 2 для способа, которым он считает. Итак, 0 - всё считать так, как написано; 1 - float на самом деле считать в double и затем конвертировать обратно во float; 2 - всё считать в long double, конвертируя во float или double в конце вычислений соответственно.

Теперь, чтобы заставить считать прогу так, как надо, нужно собирать её

gcc proga.c -msse

Только после этого у меня в консоль вывелось число 1005. Чтобы была поддержка макроса FLT_EVAL_METHOD, используем директиву -std=c99.

Выдержка из мана по gcc (по поводу ключей -mmmx -msse -m3dnow):

These switches enable or disable the use of built-in functions that allow direct access to the MMX, SSE and 3Dnow extensions of the instruction set.

О ключе -mfpmath:

To have SSE/SSE2 instructions generated automatically from floating-point code, see -mfpmath=sse.

-mfpmath может принимать ещё значения "387" и "sse,387".


Комментарии: 2
1
21 дек 09, 00:21 Александр Пчелинц…

Debian 5.0 Lenny


После почти двух лет разработки вышла пятая версия дистрибутива Debian с кодовым именем Lenny. Представлено 23200 пакетов (на 7700 больше чем etch), занимающие от 4 до 5 DVD, от 28 до 32 CD или 1 Blu-ray диск. Теперь Debian поддерживает Linux Standards Base (LSB) версии 3.2 (ранее 3.1). Доступные архитектуры: Intel x86, Alpha, SPARC, PowerPC, ARM, MIPS, Intel Itanium, HP PA-RISC, S/390, AMD64, ARM EABI. Для Intel X86 и AMD64 представлены официальные Debian Live CD. Используется ядро Linux 2.6.26.

Система установки Debian Installer также получила хорошее развитие. Появилась поддержка загрузки микропрограмм (firmware) во время установки, установка из Microsoft Windows, поддержка SATA RAID, улучшилась работа с аппаратным обеспечением.

>>> Инструкция по обновлению

>>> Подробности.

Источник

Debian 5.0 посвящен Thiemo Seufer, разработчику дебиана, погибшему 26-ого декабря 2008 года в автокатастрофе. Версия после Lenny будет иметь кодовое название “Squeeze”, по имени трёхглазого инопланетянина.

Источник


Комментарии: 1
1
18 фев 09, 05:17 Павел 0

Internet (DSL/...) ; под Линуксом

Как вы это собственно делаете? Что у вас там - ДСЛ или что?

 


Комментарии: 9
1
9 янв 09, 14:30 Benedict Wolfram …

Рассылка дистрибутивов...

Предлагаю, выкладывать тут ссылки на заказ высылки дисков (liveCD / installCD) различных дистрибутивов *nix. Из своей личной колекции ссылок могу предложить:

 

• Ubuntu  Заказать

Изначально основан на Debian. Довольно популярная система. Довольно легко настраивается. Изначально позиционирует себя как полноценная замена Windows как платформы для домашнего ПК, однако существует и "серверный вариант". Личное мнение: подходит для начинающих пользователей Linux, ещё испытывающих недостаток Windows. Почти всё по возможности реализуется через GUI, однако даже если пользователю придётся лезть в шелл, то это как правило объясняется базовых хелпом, как говорится, на пальцах.

Ubuntu базово радотает с использованием Gnome, и разработчики постарались показать эту среду во всей красе. Есть большинство необходимых для работы "из коробки" приложений, будь то OpenOffice.org или FireFox. В сети существует огромное количество how-to, так что если начинать осваивать Linux, стоит обратить внимание именно на Убунту.

Ссылка для оформления заказа: https://shipit.ubuntu.com/specialrequest

* Для заказа необходимо иметь аккаунт на проекте Cannonical. После его бесплатной регистрации на него можно будет заказывать так же и дистрибутивы Kubuntu и Edubuntu.

Kubuntu Заказать

* Дистрибутив Kubuntu это модификация ОС Ubuntu Linux от её же издателей, с той лишь разницей, что Kubuntu использует KDE вместо Gnome. Как следствие изменён пакет ПО "из коробки". Эта модификация наверняка понравится любителям красивостей. Интерфейс KDE и его потенциал всегда опережал и до сих пор опережает "новации" от Microsoft. И это всё не предел.

• Edubuntu Заказать

* Дистирибутив Edubuntu - это версия Ubuntu заточенная под использование в сфере образования. У Edubuntu отстутсвтует live-cd, так что для ознакомления хватит и обычной Убунты. Менеджер рабочего стола по прежнему Gnome, однако некоторые моменты, которые изначально сделаны для отдыха отсюда удалены. Взамен в систему вшит добрый рацион программ для обучения уровня школы и университета.

• NetUP 5.0 UTM Заказать

Итак, NetUP 5.0 UTM это не сама ОС, это лишь пакет основанный на Knoppix Linux LiveCD, в который вшит комплекс UTM - система биллинга. Система первоклассная, но для узкого круга людей. Можно заказать этот диск после бесплатной регистрации и использовать лишь как Knoppix Linux LiveCD.

 

* Сразу оговорюсь, на один аккаунт можно заказать демонстрационный диск лишь единожды. В принципе, ничего, кроме совести, не могло бы помешать Вам зарегистрировать ещё один аккаунт, но это уже дело каждого.

* Для заказа выберите пункт "OpenSolaris Free CD Order Form", заполните анкету, и в скором времени Вам вышлют пакет для ознакомления и установки OpenSolaris.
В целом OpenSolaris это младшая копия корпаративной среды Sun Solaris 10, предназначенная больше для ознакомления, чем для работы на все 100% от потенциала ОС Solaris. Так же она может подходить Вам в случае, если Вы будете использовать ОС для рядовых бытовых интересов, будь то просмотр видео, музыка, интернет, офис и т.п.
* Solaris не является ветвью Linux, и можно забыть про GPL в данном случае, хотя условия распространения и использования как OpenSolaris так и Sun Solaris 10 в целом не такие демонические и ужасающие как у ОС Windows, но тем не менее она не является "свободным ПО". Solaris является одним из изначальных направлений BSD, однако от своих конкурентов в виде OpenBSD, PC-BSD, FreeBSD она отличается прежде всего опытом и временем работы компании Sun™ Microsystems в области IT.

* Опять момент. Так как Sun Solaris 10 является базой в получении прибыли компании в области ПО (Большинство ПО, продаваемое компанией, имеют портированные версии, но максимальная стабильность и удобность достигаются естесственно именно на изначальной платформе...), так вот, так как... то с бесплатным распространением тут сложность. Распространяется лишь более старая платформа (хотя она и обновляется всё же), т.е. я предлагаю Вам ссылку на заказ "DVD Solaris Express, Developer Edition".


Комментарии: 9
2
6 окт 08, 11:58 Денис Гузий
Показаны все темы: 4 RSS друзей

Последние комментарии

Debian 5.0 Lenny
andriuha30 andrei
andriuha30 andrei s graficeskim interfeisom ustanovki, i uprocionoi nastroiki to prosto skazka.

Internet (DSL/...) ; под Линуксом
dis
dis в archlinux, slackware и иже с ними настройка xDSL проходит так:
#pppoe-setup
....
подключение
#…

Internet (DSL/...) ; под Линуксом
Александр
Александр А ИЗЕРНЕТ что, не интернет что ли? :-)

Internet (DSL/...) ; под Линуксом
Mikle Kanarov
Mikle Kanarov или модем как роутер настрроить ifconfig add rl0 net 192.168.1.2 255.255.255.0 192.168.1.1 ...или ч…

Internet (DSL/...) ; под Линуксом
Benedict Wolfram Ziwi
Benedict Wolfram Ziwi Я как-то больше из-под консоли всё делать люблю.


Поиск по блогу