Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2011, 18:22   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Вещественное 10-байтовое в Си

Всем доброго времени суток. Я тут балуюсь на досуге ассемблером, и встал вопрос использовать сишные run-time библиотеки. Они мне нужны чтоб не выдумывать свои процедуры ввода-вывода. Ну как бы там ни было не важно для чего - все равно балуюсь.
Для хранения данных я избрал себе 80-битный формат вещественного числа (FPU размер короче). Но столкнулся с непонятной для меня проблемой.:
Цитата:
Double precision values with double type have 8 byte
Ладно. Дабл не подходит, но есть в printf параметр Lf, якобы поддерживающий длинное вещественное, но хелп меня обламывает:
Цитата:
The long double type is identical to the double type.
Отсюда вывод - Си не имеет возможности работать с типом 10-байтного вещественного? Это что значит? Что за дурость?
Это действительно правда?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2011, 18:32   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include <iostream>

using std::cout;
using std::endl;
using std::cin;

int main()
{
	cout<<"sizeof(long double): "<<sizeof(long double)<<endl;
	cout<<"sizeof(double): "<<sizeof(double)<<endl;
	cin.get();
}
у меня gcc вывел 12() и 8
http://cplusplus.com/reference/clibrary/cstdio/printf/
вроде норм.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.06.2011, 19:20   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

У меня 16
Си поддерживает long double, но не компилятор msvs
netrino вне форума Ответить с цитированием
Старый 12.06.2011, 19:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но не компилятор msvs
Т.е. если я буду использовать скажем code::block я смогу увидеть именно работу с 80-битами? Не понимаю, а как же си рантайм библиотеки? Получается именно они не поддерживают работу с Extended? Как же тогда gcc компилирует код?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2011, 19:30   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

gcc поддерживает все.
я ж показал.
Цитата:
скажем code::block
ну кодблокс вообще то редактор только
а если компиль gcc то все норм будет.
я ж ссылочку еще привел.
по стандарту printf поддерживает long double
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.06.2011, 19:37   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Проблема в том, что gcc на виндовс использует мелкософтовскую msvcrt.dll, поэтому поддерживает long double только кодогенератор, но не библиотечные функции.
Возможно icc поддерживает long double, но не уверен, использует ли он свою crt, или же мелкософтовскую, надо бы глянуть в интернете.
netrino вне форума Ответить с цитированием
Старый 12.06.2011, 19:43   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ну кодблокс вообще то редактор только
Ну я не так выразился. Я имел ввиду его стандартную поставку с GCC.
Ладно, откомпилировал я проектик в GCC, получил вообще сумасшедший результат
Код:
   	long double d=123.365;
	printf("%Lfn",d);	getchar();
    return 0;
Результ:
Цитата:
-84641915541442025000000000000000000 00000000000000000000000000000000000 000000000
00000000000000000000000000000000000 00000000000000000000000000000000000 0000000000
00000000000000000000000000000000000 00000000000000000000000000000000000 0000000000
0000000000000000000000000.000000
Это явно не то что я ожидал
И даже %2.5Lf положение не спасает.
GCC ведь тоже опирается на msvcrt. Причем на стандартную. А я сейчас говорю о Win XР без наворотов, хотя и не в курсе содержит ли msvcrt120 (например) улучшенную функцию printf.

Тогда попутный вопрос: Если приходится выводить такие форматы, как поступают те кто работает с этими рантайм библиотеками?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2011, 19:46   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Проблема в том, что gcc на виндовс использует мелкософтовскую msvcrt.dll
разве всегда?
нет ли другой crt?(кроме libstdc++.a)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.06.2011, 19:54   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
разве всегда?
Я попробовал на своих Окошках - однако вызывает именно ее
Цитата:
libstdc
У меня нет.

Какие есть стандартные альтернативы для винды?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2011, 19:56   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Всегда, как же иначе?)
DigitalMars C заявляет поддержку 80-битных вещественных чисел. Рекомендую поковырять его рантайм, быть может это то что нужно.
http://digitalmars.com
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить текст на вещественное число xad_jek Помощь студентам 0 23.12.2010 22:26
Как преобразовать поле из таблицы в вещественное число? Mixasik Microsoft Office Word 6 17.07.2009 05:11
Знаковое байтовое число Rekky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 18.05.2009 09:40
4х байтовое число bvana Общие вопросы C/C++ 7 05.12.2008 00:08
Преобразование даты в вещественное число nova-alex Общие вопросы Delphi 5 03.05.2007 10:51