Другие языки программирования и технологии

Что за обозначение ± 1.7 · 10± 308, когда ясно же, что не оперирует ни один язык с числами размера 1,7 умножить на деся

7 · 10± 308, когда ясно же, что не оперирует ни один язык с числами размера 1,7 умножить на десять в ТРИСТА ВОСЬМОЙ степени?

Помогите понять суть - везде такое обозначение.
По запросам
cout << std::numeric_limits<double>::min() << endl;
cout << std::numeric_limits<double>::max() << endl;

компилятор тоже выдает 308 степени.

Я хз, как это понимать, когда вбивашеь в double число 173596314757314957314, и компилятор уже отказывается работать.
> когда вбивашеь в 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 (далее по ссылкам)

> га, ну и что? а у меня этот код не идёт, если меньшее на один символ число, то уже работает
Ты невнимателен, не заметил, что в конце численной константы у меня точка.
Asif {Aze} Haciyev
Asif {Aze} Haciyev
80 881
Лучший ответ
"Да и дураку ясно, что в 8 байтах, отводимых под double, не уместится число из 308 цифр "
Да? 1e308 занимает всего-то 5 знаков. а вовсе не 308 :) А с числами такого порядка и большими оперирует любой язык. Даже старинный Turbo Pascal - до 10^4932.

"Я хз, как это понимать, когда вбивашеь в double число 173596314757314957314, и компилятор уже отказывается работать. "
Ты его просто записываешь как целое. А такая запись слишком длинна для целого. Запиши его как число с плавающей точкой, и все будет в порядке.

"Тогда объясни, что обознчает запись "1e308 " , коли она занимает 5 знаков.
Ибо везде сказано, что e308 это десять в триста восьмой"
И правильно сказано. Но для записи числа десять в триста восьмой вовсе не надо 308 цифр (точнее, 309 цифр, но этим пренебрежем) . 308 цифр - это только один из способов его записи, совсем не единственный.

Дело в том, что в языке записываются не числа, а их коды. А кодировать можно по-разному, и для записи чисел применятся разные варианты их кодирования. Зачем писать 308 цифр, если триста из них нули? И компьютер работает не с числами, а с их кодами. Поэтому и есть целые и вещественные типы - даже при одинаковом размере в байтах тут применяются разные способы кодирования.
SA
Sowundik Abduganiew
77 028
overflow вася, оверфлоу
Денис Медведев
Денис Медведев
41 631

Похожие вопросы