Си++: Есть ли минимальное (и максимальное) значение double?
<limits.h>
но я тебе его не скажу.
лучше сделай так:
double array[100]
...
double found_max = array[0];
for (i=1; i<100; i++)
{
if (array[i]>found_max) found_max=array[i]
}
о том, как бесконечность записывается в double можно прочитать в гугле
или в посте аттилы

С запросом минимум double и минимальное double. Там такая куча всего повылезла, что я подумал здесь наверно есть ктото, кто знает и кому не лень сказать.
Спасибо большое за ответы!
зы. Насчет max=array[0] я знаю, просто тут специфическая ситуация у меня, так сделать не получается (точнее чтобы так сделать, придется сильно прогемороиться). Да и максимум не по массиву ищется. Поэтому подумал что так сделать будет проще.
IEEE 754
Или float.h, если стандарт ломает искать...
И вообще это не имеет отношения к C++
Это представление вещественных чисел описывается стандартом IEEE (номер сейчас не смогу сказать).
В типе double мне опытным путём удалось установить, что под экспоненциальную часть выделено 11 бит, значит, под мантису -- 52 бита.
Число равно (-1)^s 2^(e - 1023) 1.m, где s -- знаковый бит, e -- экспоненциальная часть, m -- мантиса.
При этом если e = 0, то число равно (-1)^s 2^(-1022) 0.m.
Если e = 2047, m=0, то (-1)^s inf, а если m > 0, то nan.
Таким образом минимальное число в double равно (-1) 2^1023 1.11...11 (после двоичной точки 52 единицы). Это приблизительно 1.79769e+308.
Присваивать лучше используя union -- у минимального вещественного числа типа double все, кроме одного бита равны 1.
Удачи!
ЗЫ Опередили!

// numeric_limits_max.cpp
// compile with: /EHsc
#include <iostream>
#include <limits>
using namespace std;
void main( )
{
cout << "The maximum value for type float is: "
<< numeric_limits<float>::max( )
<< endl;
cout << "The maximum value for type double is: "
<< numeric_limits<double>::max( )
<< endl;
cout << "The maximum value for type float is: "
<< numeric_limits<int>::max( )
<< endl;
cout << "The maximum value for type short int is: "
<< numeric_limits<short int>::max( )
<< endl;
}

ЗЫ Есть ещё IEEE 854, но это уже излишние навороты. Всё, другого не дано.
Потому что человек пишет программу на Си++ и это указал в своем вопросе. Кроме того, не уверен что в стандарте написано про то в каком формате числа в double хранятся.



Смысл такой, что типы float, double и long double расположены в порядке неубывания точности. А характеристики типов определяются через numeric_limits, так что я все верно написал.






это в IEEE описывается, а в стандарте Си++ - не нашел.


В нем ничего не сказано про то, что стандартный тип double обязан соответствовать IEEE # какой-то там.
1) Твой любимый компилятор C++ это Microsoft Visual С++
2)
В нем ничего не сказано про то, что стандартный тип double обязан соответствовать IEEE # какой-то там.- заявляю что ложь, не читая. Хотя может быть... В 750 страниц вполне могли заинклюдить 10 страничек, написанных в 85 году...
3) тут не нашёл упоминаний об ISO, зато чётко описан самый главный 1% IEEE 754.
PS Ты мне либы покажи и ссылку, что слова-то лить.
2) А ты посмотри, люди старались для тебя, писали.


Если же флажок сброшен, то известно только то, что ты написал.
Ок, не ошибусь, если выдвину несколько предположений?2) Да, ieee туда не впихивали, написали только пару очень общих предложений. В целом поиск по "IEEE 754" даёт непустые результаты.
1) Твой любимый компилятор C++ это Microsoft Visual С++
2)В нем ничего не сказано про то, что стандартный тип double обязан соответствовать IEEE # какой-то там.- заявляю что ложь, не читая. Хотя может быть... В 750 страниц вполне могли заинклюдить 10 страничек, написанных в 85 году...
3) тут не нашёл упоминаний об ISO, зато чётко описан самый главный 1% IEEE 754.
3) гугловский поиск 'msdn c++ "iso 14882"' выдал всё что угодно, но не msdn. О чём это говорит?..
И конечно, конечно же ieee 754 вполне удовлетворяет 2 предложениям из iso 14882


Короче надо очень сильно поискать, чтобы найти конкретные либы, не удовлетворяющие IEEE 754 (и тем более 854). Ибо они такие никому в повседневной жизни не нужны.
double max_dbl = DBL_MAX;
double min_dbl = -DBL_MIN;
Ссылка на стандарт в FAQ.
Не во всяком компьютере используется представление от ай-яй-яй.
---
...Я работаю антинаучным аферистом...
Т.е. такой код вообще бессмысленный:
if (x>double_max) ...
X чисто физически не может быть больше максимального.
X чисто физически не может быть больше максимальногоВо-первых, может.
Во-вторых, человеку нужно чтобы X было больше минимального.

Оставить комментарий
vertyal17
Чтобы использовать типа в таком алгоритмеdouble array[100]
...
double found_max = minimum_double;
for (i=0; i<100; i++)
{
if (array[i]>found_max) found_max=array[i]
}
идея в том, чтобы начально загнать в found_max такое число, чтобы при первом сравнении с array[0]>found_max всегда выполнялось.
Нет ли такого макроса или функции, возвращающего минимамльное значение, которое может принять переменная типа double ?