Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Типы данных(float и работа с ним)

734
16 января 2003 года
gek
4 / / 20.01.2000
Я что-то не пойму никак, как мне вывести на консоль большое число к примеру
float f=123456789012345678901234567.12
пробовал printf и setf
что-то выводится неверно
Подскажите в чем заблуждаюсь?
358
16 января 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by gek
Я что-то не пойму никак, как мне вывести на консоль большое число к примеру
float f=123456789012345678901234567.12
пробовал printf и setf
что-то выводится неверно
Подскажите в чем заблуждаюсь?


а cout не пробовал???

317
16 января 2003 года
Relax
573 / / 20.09.2000
Цитата:
Originally posted by gek
Я что-то не пойму никак, как мне вывести на консоль большое число к примеру
float f=123456789012345678901234567.12
пробовал printf и setf
что-то выводится неверно
Подскажите в чем заблуждаюсь?


что значит - "неверно"? - напиши конкретней: сожержание переменной, строку кода, которая делает вывода и то, что получается на экране...

1.8K
16 января 2003 года
ALI
129 / / 10.01.2003
gek

 
Код:
float   32  1.18  10^-38 < |X| < 3.40  10^38    Scientific (7-digit) precision)
double  64  2.23  10^-308 < |X| < 1.79  10^308  Scientific (15-digit precision)
long double 80  3.37  10^-4932 < |X| < 1.18  10^4932    Financial (18-digit precision)

помоему 123456789012345678901234567.12 даже в long double не влазит



если тебе нужно работать с очень болшими числами
то тебе нужна библиотека GMP http://www.swox.com/gmp/(GNU Multiple Precision Libruary) точнее ее порт с unixa для
виндов (кстати на http://www.swox.com/gmp/ написанно как скомпилировать ее под винду - если получится то тебе можно будет при жизни памятник ставить) и тоды складывай числа хоть с 100000 знаков.


P.S. Да и название темы можно было по конкретнее
указать. "Я что-то не пойму" - подходит для 99.99% тем в этом форуме.
317
16 января 2003 года
Relax
573 / / 20.09.2000
Цитата:
Originally posted by ALI
gek

 
Код:
float   32  1.18  10^-38 < |X| < 3.40  10^38    Scientific (7-digit) precision)
double  64  2.23  10^-308 < |X| < 1.79  10^308  Scientific (15-digit precision)
long double 80  3.37  10^-4932 < |X| < 1.18  10^4932    Financial (18-digit precision)

помоему 123456789012345678901234567.12 даже в long double не влазит



если тебе нужно работать с очень болшими числами
то тебе нужна библиотека GMP http://www.swox.com/gmp/(GNU Multiple Precision Libruary) точнее ее порт с unixa для
виндов (кстати на http://www.swox.com/gmp/ написанно как скомпилировать ее под винду - если получится то тебе можно будет при жизни памятник ставить) и тоды складывай числа хоть с 100000 знаков.


P.S. Да и название темы можно было по конкретнее
указать. "Я что-то не пойму" - подходит для 99.99% тем в этом форуме.


сначала мне тоже показалось, что число слишком велико, но ведь ты сам написал, что максимум это 3.40 * 10^38, а в указанном числе всего 27 цифр до запятой, что все-таки меньше...

1.8K
16 января 2003 года
ALI
129 / / 10.01.2003
Цитата:
Originally posted by Relax

сначала мне тоже показалось, что число слишком велико, но ведь ты сам написал, что максимум это 3.40 * 10^38, а в указанном числе всего 27 цифр до запятой, что все-таки меньше...


обрати внимание на числа в скобках
работать то он с такими числами работает
только правилными будут вот как раз вот столько знаков от начала сколько написанно в скобках
а вместо остальных увидишь все что угодно но не
то что было изначально присвоенно.
а связанно это с тем как храняться числа с плавающей точкой

317
16 января 2003 года
Relax
573 / / 20.09.2000
Цитата:
Originally posted by ALI

обрати внимание на числа в скобках
работать то он с такими числами работает
только правилными будут вот как раз вот столько знаков от начала сколько написанно в скобках
а вместо остальных увидишь все что угодно но не
то что было изначально присвоенно.
а связанно это с тем как храняться числа с плавающей точкой


ну да - все правильно, но вопрос по другому поставлен - не как с такими числами работать, а как вывести такое число...

1.8K
16 января 2003 года
ALI
129 / / 10.01.2003
Цитата:
Originally posted by Relax

ну да - все правильно, но вопрос по другому поставлен - не как с такими числами работать, а как вывести такое число...



Код:
#include <vcl.h>
#include <conio.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
        long double f=123456789012345678901234567.12;
        double      f1=123456789012345678901234567.12     ;
        float       f2=123456789012345678901234567.12       ;
        printf("value       = 123456789012345678901234567.12\n");
        printf("--------------------------------------------\n");
        printf("long double = %30.2Lf \n",f );
        printf("double      = %30.2lf \n",f1);
        printf("float       = %30.2f  \n",f2);
        getch();
        return 0;
}


результат:
 
Код:
value       = 123456789012345678901234567.12
--------------------------------------------
long double = 123456789012345678200000000.00
double      = 123456789012345678200000000.00
float       = 123456790068172987400000000.00
1.7K
16 января 2003 года
Mark
114 / / 21.11.2002
А если поразрядно переписать f в строку?
1.8K
16 января 2003 года
ALI
129 / / 10.01.2003
Цитата:
Originally posted by Mark
А если поразрядно переписать f в строку?


знаки теряются не при выводе
а на операции присваивания
те на самом деле вместо ноликов
находится мусор и связанно это с
представлением чисел с плавающей
точкой. те для типов данных с
плавающей точкой операция присваивания
oзначает присваивание приближенного
значения

1.7K
16 января 2003 года
Mark
114 / / 21.11.2002
сравните вывод
unsigned __int64 ff = 12345678901234567890;
и
unsigned __int64 ff = 123456789012345678900;

При таких раскладах, видимо, надо смотреть физический смысл этой f, какая может быть длина мантиссы, какие операции будут производится. А потом придумать как ее раскидать по нескольким перменным и как использовать.

А вообще - матчасть надо учить, а то щас такой велосипед изобретем...
317
16 января 2003 года
Relax
573 / / 20.09.2000
Цитата:
Originally posted by ALI


Код:
#include <vcl.h>
#include <conio.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
        long double f=123456789012345678901234567.12;
        double      f1=123456789012345678901234567.12     ;
        float       f2=123456789012345678901234567.12       ;
        printf("value       = 123456789012345678901234567.12\n");
        printf("--------------------------------------------\n");
        printf("long double = %30.2Lf \n",f );
        printf("double      = %30.2lf \n",f1);
        printf("float       = %30.2f  \n",f2);
        getch();
        return 0;
}


результат:
 
Код:
value       = 123456789012345678901234567.12
--------------------------------------------
long double = 123456789012345678200000000.00
double      = 123456789012345678200000000.00
float       = 123456790068172987400000000.00



что цифры теряются я и не спорю...
а вообще чтобы с такими числами работать нужно специальный класс писать и хранить само число в виде символьного массива, ну и соответственно все операции прописать... кстати, это не так уж и сложно. помнится кому-то из однокурсников такое задание давали в качестве курсового.

1.8K
16 января 2003 года
ALI
129 / / 10.01.2003
короче самый правильный ответ
читай Дональда Кнута
или смоги использвать GMP
358
17 января 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by ALI
короче самый правильный ответ
читай Дональда Кнута
или смоги использвать GMP


Ну вот, все кричат - Прогресс, Прогресс...А в итоге как и 10-15 лет назад на любой вопрос дается ответ - Посмотри у Кнута=)))

1.8K
17 января 2003 года
ALI
129 / / 10.01.2003
Цитата:
Originally posted by moonmike

Ну вот, все кричат - Прогресс, Прогресс...А в итоге как и 10-15 лет назад на любой вопрос дается ответ - Посмотри у Кнута=)))



Хе Хе. Я дома без фундамента както не встречал.
скажем например мануал по GMP содержит кучу ссылок на Кнута.

1.7K
17 января 2003 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by Relax


что цифры теряются я и не спорю...
а вообще чтобы с такими числами работать нужно специальный класс писать и хранить само число в виде символьного массива, ну и соответственно все операции прописать... кстати, это не так уж и сложно. помнится кому-то из однокурсников такое задание давали в качестве курсового.



Точно.

Цитата:
Originally posted by ALI

короче самый правильный ответ
читай Дональда Кнута
или смоги использвать GMP



У нас как в той старой шутке. Если не получилось с 5-го раза - то прочти наконец мануал. В прочем бывает и наоборот. Можно по незнанию сделать то, что сделать вообще-то нельзя. Пример. Югославы с комплексом С-200 (?) дремучего года выпуска против технологии "стелс": "Извините, мы не знали , что он невидимый...".

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог