Форум программистов, компьютерный форум CyberForum.ru

самый, самый большой )) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
11.08.2011, 12:33     самый, самый большой )) #1
народ че делать unsigned long long int - оказался недостаточен
есть тип побольше какой-нить? или там как-то обойти как в паскале?
VS 2008
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2011, 12:33     самый, самый большой ))
Посмотрите здесь:

Самый самый самый простой пример рекурсии C++
C++ найти самый большой элемент Массива
C++ Найти второй самый большой элемент массива и второй самый маленький элемент массива
C++ C++ Задача на екзамене Для целочисленной квадратной матрицы найти количество элементов кратных k, и самый большой из них
C++ В каждом ряду матрицы найти самый большой элемент и поменять его местами с соответствующим диагональным элементом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 12:38     самый, самый большой )) #2
Длинная арифметика
Больше никак.
И как на паскале это обойти можно? о_О
Там тоже максимальный - int64, но только у него еще 1 разряд под знак. Поэтому unsigned long long больше самого большого паскалевского типа =)
-=ЮрА=-
Заблокирован
Автор FAQ
11.08.2011, 12:44     самый, самый большой )) #3
А чем плох старый добрый double???В нём диапазон до Е+304
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 12:49     самый, самый большой )) #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
А чем плох старый добрый double???В нём диапазон до Е+304
Так он не может точно большие числа представлять, погрешности будут. Да и вывести на экран его проблематично..
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
11.08.2011, 12:55  [ТС]     самый, самый большой )) #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
А чем плох старый добрый double???В нём диапазон до Е+304
точно вроде работает, токо int(double_var) выдает отрицательный результат
хотя double_var положителен
короче как вывести double_var, чтоб другая прога считала его за int ?
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 12:57     самый, самый большой )) #6
Цитата Сообщение от Noname2512 Посмотреть сообщение
int(double_var) выдает отрицательный результат
Так это число не влезает в int, оно может только в double хранится, и то неточно.
ороче как вывести double_var, чтоб другая прога считала его за int ?
Насколько я знаю - никак.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
11.08.2011, 12:58     самый, самый большой )) #7
Цитата Сообщение от Noname2512 Посмотреть сообщение
короче как вывести double_var, чтоб другая прога считала его за int ?
Noname2512, а как другая прога его будет считывать? Вот так же и выводить, только наоборот
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
11.08.2011, 13:03  [ТС]     самый, самый большой )) #8
ну да неправильно я выразился
как сделать так чтобы double_var был визуально похож на int , чтоб там без точек, без е+...
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 13:04     самый, самый большой )) #9
Да не подойдет double для ваших целей... =)
Код
diagon@shadeware:~$ cat test.cpp && g++ test.cpp && ./a.out
#include <iostream>
int main(){
	double x;
	std::cin >> x;
	std::cout << std::fixed << x;
}
1234567890123456789012345678901234567890
1234567890123456846996462118072609669120.000000
Погрешность налицо.
Вывести без нулей на конце можно с помощью setprecision(0)
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
11.08.2011, 13:07  [ТС]     самый, самый большой )) #10
Цитата Сообщение от diagon Посмотреть сообщение
Вывести без нулей на конце можно с помощью setprecision(0)
я ее использовал е+... остается
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 13:08     самый, самый большой )) #11
Цитата Сообщение от Noname2512 Посмотреть сообщение
я ее использовал е+... остается
C++
1
std::cout << std::fixed << std::setprecision(0) << num;
-=ЮрА=-
Заблокирован
Автор FAQ
11.08.2011, 13:37     самый, самый большой )) #12
Цитата Сообщение от diagon Посмотреть сообщение
double хранится, и то неточно.
- что значит неточно хранитсья в дабл, это тип для хранения чисел с плавающей точкой размерностью до Е+304, что в него записал то и считал, что ты имел в виду???

Добавлено через 1 минуту
Как C вариант
Цитата Сообщение от diagon Посмотреть сообщение
std::cout << std::fixed << std::setprecision(0) << num;
double num;
printf("%.0f",num);
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.08.2011, 13:38     самый, самый большой )) #13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- что значит неточно хранитсья в дабл, это тип для хранения чисел с плавающей точкой размерностью до Е+304, что в него записал то и считал, что ты имел в виду???

Добавлено через 1 минуту
Как C вариант
double num;
printf("%.0f",num);
Смотри #9.
Обрати внимание на погрешность.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
11.08.2011, 13:38     самый, самый большой )) #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- что значит неточно хранитсья в дабл, это тип для хранения чисел с плавающей точкой размерностью до Е+304, что в него записал то и считал, что ты имел в виду???
diagon даже пример тебе показал, что он имел ввиду. Вот тебе ещё один:
C
1
2
    double v = 100000000000000012345.0;
    printf("%f\n", v);
Попробуй выполнить.
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
11.08.2011, 13:44     самый, самый большой )) #15
Зачем же извращатся над стандартными типами, лучше использовать длинную арефметику, в инете есть масса премеров.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
11.08.2011, 13:53     самый, самый большой )) #16
Цитата Сообщение от aram_gyumri Посмотреть сообщение
Зачем же извращаться над стандартными типами, лучше использовать длинную арифметику, в инете есть масса примеров.
Ну, про длинную арифметику в первом же ответе было сказано. Да и примеры даже на этом форуме найти можно. И мои в том числе, и diagon тоже самодельные классы/функции показывал.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
11.08.2011, 14:00     самый, самый большой )) #17
double без потери точности может представлять только 15 десятичных цифр и
C++
1
std::numeric_limits<double>::digits10
это подтверждает.
IrineK
Заблокирован
11.08.2011, 14:09     самый, самый большой )) #18
Double использует для хранения 64 бита: 1 знаковый, 11 - под экспоненту,52 - под мантиссу. Т.е. точно целое число можно получить до 2^52-1

В то же время, unsigned long long int (добавлен стандартом С99) использует для хранения целого 64 бита. Т.е. точно целое число можно получить до 2^64-1. Если этого мало - переходим на длинную арифметику.

В принципе не рекомендуется смешивать целочисленную арифметику и арифметику с плавающей точкой (их даже обрабатывают два разных процессора).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2011, 14:16     самый, самый большой ))
Еще ссылки по теме:

C++ Самый большой простой делитель числа
Найти самый большой элемент матрицы по модулю и его индекс C++
C++ Определить, какой сначала был день самый тёплый или самый холодный?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
11.08.2011, 14:16     самый, самый большой )) #19
Цитата Сообщение от IrineK Посмотреть сообщение
52 - под мантиссу. Т.е. точно целое число можно получить до 2^52-1
Ну, на всякий случай поправлю немного. Да, для хранения мантиссы отведено 52 бита, но при этом там хранится 53-битная мантисса В нормализованной записи целая часть мантиссы всегда равна 1, поэтому в типах double и float эта единица в явном виде не сохраняется (в отличие от long double).
Так что целые до 2^53-1.
Yandex
Объявления
11.08.2011, 14:16     самый, самый большой ))
Ответ Создать тему
Опции темы

Текущее время: 11:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru