7 · 10± 308, когда ясно же, что не оперирует ни один язык с числами размера 1,7 умножить на десять в ТРИСТА ВОСЬМОЙ степени?
Помогите понять суть - везде такое обозначение.
По запросам
cout << std::numeric_limits<double>::min() << endl;
cout << std::numeric_limits<double>::max() << endl;
компилятор тоже выдает 308 степени.
Я хз, как это понимать, когда вбивашеь в double число 173596314757314957314, и компилятор уже отказывается работать.
Другие языки программирования и технологии
Что за обозначение ± 1.7 · 10± 308, когда ясно же, что не оперирует ни один язык с числами размера 1,7 умножить на деся
> когда вбивашеь в double число 173596314757314957314, и компилятор уже отказывается работать.
Да, ладно?
#include <iostream>
using namespace std;
int main() {
double x1, x2;
x1 = 1735963147573149573140000000000000000.0;
cout << x1 << endl;
cin >> x2;
cout << x2 << endl;
return 0;
}
> Да и дураку ясно, что в 8 байтах, отводимых под double, не уместится число из 308 цифр.
Конечно не уместится, числа с плавающей запятой хранятся только с определенной точностью, а порядок такого числа как раз до 308. 1.2e1 = 12; 1.2e2 = 120; 1.2e3 = 1200 и т. д. Не путай представление числа в памяти и как оно тебе отобразится на экране, можно с разной точностью вывести.
Просвещайся: http://ru.wikipedia.org/wiki/Float http://ru.wikipedia.org/wiki/IEEE_754-2008 (далее по ссылкам)
> га, ну и что? а у меня этот код не идёт, если меньшее на один символ число, то уже работает
Ты невнимателен, не заметил, что в конце численной константы у меня точка.
Да, ладно?
#include <iostream>
using namespace std;
int main() {
double x1, x2;
x1 = 1735963147573149573140000000000000000.0;
cout << x1 << endl;
cin >> x2;
cout << x2 << endl;
return 0;
}

> Да и дураку ясно, что в 8 байтах, отводимых под double, не уместится число из 308 цифр.
Конечно не уместится, числа с плавающей запятой хранятся только с определенной точностью, а порядок такого числа как раз до 308. 1.2e1 = 12; 1.2e2 = 120; 1.2e3 = 1200 и т. д. Не путай представление числа в памяти и как оно тебе отобразится на экране, можно с разной точностью вывести.
Просвещайся: http://ru.wikipedia.org/wiki/Float http://ru.wikipedia.org/wiki/IEEE_754-2008 (далее по ссылкам)
> га, ну и что? а у меня этот код не идёт, если меньшее на один символ число, то уже работает
Ты невнимателен, не заметил, что в конце численной константы у меня точка.
"Да и дураку ясно, что в 8 байтах, отводимых под double, не уместится число из 308 цифр "
Да? 1e308 занимает всего-то 5 знаков. а вовсе не 308 :) А с числами такого порядка и большими оперирует любой язык. Даже старинный Turbo Pascal - до 10^4932.
"Я хз, как это понимать, когда вбивашеь в double число 173596314757314957314, и компилятор уже отказывается работать. "
Ты его просто записываешь как целое. А такая запись слишком длинна для целого. Запиши его как число с плавающей точкой, и все будет в порядке.
"Тогда объясни, что обознчает запись "1e308 " , коли она занимает 5 знаков.
Ибо везде сказано, что e308 это десять в триста восьмой"
И правильно сказано. Но для записи числа десять в триста восьмой вовсе не надо 308 цифр (точнее, 309 цифр, но этим пренебрежем) . 308 цифр - это только один из способов его записи, совсем не единственный.
Дело в том, что в языке записываются не числа, а их коды. А кодировать можно по-разному, и для записи чисел применятся разные варианты их кодирования. Зачем писать 308 цифр, если триста из них нули? И компьютер работает не с числами, а с их кодами. Поэтому и есть целые и вещественные типы - даже при одинаковом размере в байтах тут применяются разные способы кодирования.
Да? 1e308 занимает всего-то 5 знаков. а вовсе не 308 :) А с числами такого порядка и большими оперирует любой язык. Даже старинный Turbo Pascal - до 10^4932.
"Я хз, как это понимать, когда вбивашеь в double число 173596314757314957314, и компилятор уже отказывается работать. "
Ты его просто записываешь как целое. А такая запись слишком длинна для целого. Запиши его как число с плавающей точкой, и все будет в порядке.
"Тогда объясни, что обознчает запись "1e308 " , коли она занимает 5 знаков.
Ибо везде сказано, что e308 это десять в триста восьмой"
И правильно сказано. Но для записи числа десять в триста восьмой вовсе не надо 308 цифр (точнее, 309 цифр, но этим пренебрежем) . 308 цифр - это только один из способов его записи, совсем не единственный.
Дело в том, что в языке записываются не числа, а их коды. А кодировать можно по-разному, и для записи чисел применятся разные варианты их кодирования. Зачем писать 308 цифр, если триста из них нули? И компьютер работает не с числами, а с их кодами. Поэтому и есть целые и вещественные типы - даже при одинаковом размере в байтах тут применяются разные способы кодирования.
overflow вася, оверфлоу
Похожие вопросы
- Помогите!! C ++ Вводится число от 1...999. Вывести данное число на естественном языке. Например, 52 – пятьдесят два.
- 1. Написать программу, которая заполняет массив целых чисел размеров 20 элементов значениями роста учащихся (случайные ч
- Язык Си. Читаю K&R (книга автора языка с примерами). Упражнение 1.10
- Как можно написать программу на языке C, которая будет выводить числа от 1 до 1000 без if, switch, do, while, for, goto?
- Вывести все числа от 1 до N, являющиеся палидромами
- ПОМОГИТЕ! Нужны числа от 1 до 1 000 000 в таком порядке:. 1 2 3 4 5 6 7
- Вам даны все целые числа от 1 до N + 1, кроме одного. Найдите отсутствующее число.
- Генерация уникальных чисел от 1 до 100 на С++
- Помогите решить задачу на языке Паскаль. Найти сумму всех чётных чисел от 1 до 1000 (задачу решить 2 способами)
- Найдите наибольшее четырехзначное число, которое при делении на любое однозначное число, кроме 1,2и3, дает в остатке 3