Типы данных(float и работа с ним)
float f=123456789012345678901234567.12
пробовал printf и setf
что-то выводится неверно
Подскажите в чем заблуждаюсь?
Я что-то не пойму никак, как мне вывести на консоль большое число к примеру
float f=123456789012345678901234567.12
пробовал printf и setf
что-то выводится неверно
Подскажите в чем заблуждаюсь?
а cout не пробовал???
Я что-то не пойму никак, как мне вывести на консоль большое число к примеру
float f=123456789012345678901234567.12
пробовал printf и setf
что-то выводится неверно
Подскажите в чем заблуждаюсь?
что значит - "неверно"? - напиши конкретней: сожержание переменной, строку кода, которая делает вывода и то, что получается на экране...
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% тем в этом форуме.
gek
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 цифр до запятой, что все-таки меньше...
сначала мне тоже показалось, что число слишком велико, но ведь ты сам написал, что максимум это 3.40 * 10^38, а в указанном числе всего 27 цифр до запятой, что все-таки меньше...
обрати внимание на числа в скобках
работать то он с такими числами работает
только правилными будут вот как раз вот столько знаков от начала сколько написанно в скобках
а вместо остальных увидишь все что угодно но не
то что было изначально присвоенно.
а связанно это с тем как храняться числа с плавающей точкой
обрати внимание на числа в скобках
работать то он с такими числами работает
только правилными будут вот как раз вот столько знаков от начала сколько написанно в скобках
а вместо остальных увидишь все что угодно но не
то что было изначально присвоенно.
а связанно это с тем как храняться числа с плавающей точкой
ну да - все правильно, но вопрос по другому поставлен - не как с такими числами работать, а как вывести такое число...
ну да - все правильно, но вопрос по другому поставлен - не как с такими числами работать, а как вывести такое число...
#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;
}
результат:
--------------------------------------------
long double = 123456789012345678200000000.00
double = 123456789012345678200000000.00
float = 123456790068172987400000000.00
А если поразрядно переписать f в строку?
знаки теряются не при выводе
а на операции присваивания
те на самом деле вместо ноликов
находится мусор и связанно это с
представлением чисел с плавающей
точкой. те для типов данных с
плавающей точкой операция присваивания
oзначает присваивание приближенного
значения
unsigned __int64 ff = 12345678901234567890;
и
unsigned __int64 ff = 123456789012345678900;
При таких раскладах, видимо, надо смотреть физический смысл этой f, какая может быть длина мантиссы, какие операции будут производится. А потом придумать как ее раскидать по нескольким перменным и как использовать.
А вообще - матчасть надо учить, а то щас такой велосипед изобретем...
#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;
}
результат:
--------------------------------------------
long double = 123456789012345678200000000.00
double = 123456789012345678200000000.00
float = 123456790068172987400000000.00
что цифры теряются я и не спорю...
а вообще чтобы с такими числами работать нужно специальный класс писать и хранить само число в виде символьного массива, ну и соответственно все операции прописать... кстати, это не так уж и сложно. помнится кому-то из однокурсников такое задание давали в качестве курсового.
короче самый правильный ответ
читай Дональда Кнута
или смоги использвать GMP
Ну вот, все кричат - Прогресс, Прогресс...А в итоге как и 10-15 лет назад на любой вопрос дается ответ - Посмотри у Кнута=)))
Ну вот, все кричат - Прогресс, Прогресс...А в итоге как и 10-15 лет назад на любой вопрос дается ответ - Посмотри у Кнута=)))
Хе Хе. Я дома без фундамента както не встречал.
скажем например мануал по GMP содержит кучу ссылок на Кнута.
что цифры теряются я и не спорю...
а вообще чтобы с такими числами работать нужно специальный класс писать и хранить само число в виде символьного массива, ну и соответственно все операции прописать... кстати, это не так уж и сложно. помнится кому-то из однокурсников такое задание давали в качестве курсового.
Точно.
короче самый правильный ответ
читай Дональда Кнута
или смоги использвать GMP
У нас как в той старой шутке. Если не получилось с 5-го раза - то прочти наконец мануал. В прочем бывает и наоборот. Можно по незнанию сделать то, что сделать вообще-то нельзя. Пример. Югославы с комплексом С-200 (?) дремучего года выпуска против технологии "стелс": "Извините, мы не знали , что он невидимый...".