2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Язык С, scanf и long double
Сообщение13.07.2018, 16:57 


16/10/14

667
Как с помощью функции scanf прочитать число типа long double в языке C ?
Содержательные попытки решения задачи:
Используется синтаксис C
scanf("%lf", &x);
считывает число типа double, но не long double. Кроме того проверены варианты: %Lf, %lF, %LF, %llf, %LLF - не помогают

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 17:05 
Заслуженный участник


27/04/09
28128
А что говорит документация?

-- Пт июл 13, 2018 19:10:00 --

Судя по всему, она говорит, что %Lf должно работать. Так что непонятно, почему у вас не сработало.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:06 
Заслуженный участник
Аватара пользователя


01/09/13
4318
SpiderHulk в сообщении #1326531 писал(а):
считывает число типа double, но не long double

а между ними есть разница?

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:11 
Заслуженный участник
Аватара пользователя


16/07/14
8336
Цюрих
Geen в сообщении #1326543 писал(а):
а между ними есть разница?
Да, double обычно 64-битный, а long double - 80-битный.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:14 
Заслуженный участник
Аватара пользователя


01/09/13
4318
mihaild в сообщении #1326547 писал(а):
Geen в сообщении #1326543 писал(а):
а между ними есть разница?
Да, double обычно 64-битный, а long double - 80-битный.

Не обязательно.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:17 
Заслуженный участник
Аватара пользователя


16/07/14
8336
Цюрих
Geen в сообщении #1326549 писал(а):
Не обязательно.
mihaild в сообщении #1326547 писал(а):
обычно

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:18 
Заслуженный участник
Аватара пользователя


01/09/13
4318
https://en.wikipedia.org/wiki/Long_double

и вопрос-то был конкретно про случай ТС...

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 21:40 


16/10/14

667
arseniiv в сообщении #1326532 писал(а):
%Lf должно работать

И тем не менее не работает, точнее работает да не так как надо. Пытаясь вводить разные числа я обнаружил что в переменную $x$ всегда заносится значение $1,13303e-317$

===================================

Возможно дело в компиляторе Dew-C++, он предназначен, как следует из названия, для С++, а я пытаюсь писать на нём программы используя только средства языка С

-- 13.07.2018, 21:55 --

В компилятора Pelles C $%Lf$ в $scanf$ работает, вот только long double ничем не отличается от просто double

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 22:08 
Заслуженный участник


02/08/11
6874
SpiderHulk в сообщении #1326570 писал(а):
Dew-C++
Да, дело в нём, но не в том, что он плюсовый. Среда Dev-C++ использует gcc (часть MinGW) в качестве компилятора и майкрософтовскую рантайм-библиотеку. Они имеют разные взгляды на размер long double, что и влечёт означенную проблему. То есть это известный баг MinGW. На stackoverflow предлагают решение: #define __USE_MINGW_ANSI_STDIO перед #include <stdio.h>.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение03.01.2019, 03:03 


14/07/17
10
Киев
Я тоже долго мучился над этим. Заработало:
long double myld;
printf("Enter long double myld: ");
scanf("%Lf", &myld);
printf("myld = %Lg\n", myld);

Программа выдает:

Enter long double myld: 1,28e-1024
myld = 1,28e-1024

Система программирования CodeBlocks
Дополнительно установленный компилятор: MinGW64
Опция компиляции: -m64
Выяснил, кроме того, что sizeof(long double) = 16;
LDBL_MAX = 1,18973e+4932.
Битовое представление максимального: 7ffeffffffffffffffff,
т.е. 80 бит. Это значит что 128 бит занимает только с целью выравнивания.
Процессор Intel оперирует правающим типом в 80 бит.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group