Константы во float.h
От: Vain Россия google.ru
Дата: 27.12.07 13:35
Оценка:
Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:
#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MAX         1.7976931348623158e+308 /* max value */
#define DBL_MIN         2.2250738585072014e-308 /* min positive value */

#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define FLT_MAX         3.402823466e+38F        /* max value */
#define FLT_MIN         1.175494351e-38F        /* min positive value */


Расчёты:
#define DBL_EPSILONd    2.2204460492503130808472633361816e-16
#define DBL_MAXd        1.797693134862315708145274237317e+308
#define DBL_MINd        2.2250738585072013830902327173324e-308

#define FLT_EPSILONd    1.1920928955078125e-07
#define FLT_MAXd        3.4028234663852885981170418348452e+38
#define FLT_MINd        1.1754943508222875079687365372222e-38


Считал в калькуляторе windows
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: Константы во float.h
От: oziro Нигерия  
Дата: 27.12.07 13:50
Оценка:
Здравствуйте, Vain, Вы писали:

V>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:


А для чего это надо?

V>
V>#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */

V>


V>Расчёты:

V>
V>#define DBL_EPSILONd    2.2204460492503130808472633361816e-016

V>


Если я хоть чуть-чуть уловил — то выделенные значения по-любому должны были измениться А так:
Re: Константы во float.h
От: Programador  
Дата: 27.12.07 14:11
Оценка:
Здравствуйте, Vain, Вы писали:

V>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:

V>
V>#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
V>#define DBL_MAX         1.7976931348623158e+308 /* max value */
V>#define DBL_MIN         2.2250738585072014e-308 /* min positive value */

V>#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */
V>#define FLT_MAX         3.402823466e+38F        /* max value */
V>#define FLT_MIN         1.175494351e-38F        /* min positive value */
V>


V>Расчёты:

V>
V>#define DBL_EPSILONd    2.2204460492503130808472633361816e-16
V>#define DBL_MAXd        1.797693134862315708145274237317e+308
V>#define DBL_MINd        2.2250738585072013830902327173324e-308

V>#define FLT_EPSILONd    1.1920928955078125e-07
V>#define FLT_MAXd        3.4028234663852885981170418348452e+38
V>#define FLT_MINd        1.1754943508222875079687365372222e-38
V>


V>Считал в калькуляторе windows

А зачем?
потом FLT_EPSILON это 32 разряда вида ??????0000000000001 а куда 1.1920928955078125e-07 округлится
Re[2]: Константы во float.h
От: Vain Россия google.ru
Дата: 27.12.07 15:36
Оценка:
Здравствуйте, Programador, Вы писали:

V>>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:

V>>
V>>#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
V>>#define DBL_MAX         1.7976931348623158e+308 /* max value */
V>>#define DBL_MIN         2.2250738585072014e-308 /* min positive value */

V>>#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */
V>>#define FLT_MAX         3.402823466e+38F        /* max value */
V>>#define FLT_MIN         1.175494351e-38F        /* min positive value */
V>>


V>>Расчёты:

V>>
V>>#define DBL_EPSILONd    2.2204460492503130808472633361816e-16
V>>#define DBL_MAXd        1.797693134862315708145274237317e+308
V>>#define DBL_MINd        2.2250738585072013830902327173324e-308

V>>#define FLT_EPSILONd    1.1920928955078125e-07
V>>#define FLT_MAXd        3.4028234663852885981170418348452e+38
V>>#define FLT_MINd        1.1754943508222875079687365372222e-38
V>>


V>>Считал в калькуляторе windows

P>А зачем?
меня интересует правильно ли я посчитал значения
P>потом FLT_EPSILON это 32 разряда вида ??????0000000000001 а куда 1.1920928955078125e-07 округлится
Важнее здесь куда DBL_MAX округляется
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: Константы во float.h
От: Vain Россия google.ru
Дата: 27.12.07 15:38
Оценка:
Здравствуйте, oziro, Вы писали:

V>>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:


O> А для чего это надо?


V>>
V>>#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */

V>>


V>>Расчёты:

V>>
V>>#define DBL_EPSILONd    2.2204460492503130808472633361816e-016

V>>


O>Если я хоть чуть-чуть уловил — то выделенные значения по-любому должны были измениться А так:

Почему, число то одно и тоже.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Константы во float.h
От: Programador  
Дата: 27.12.07 16:01
Оценка:
Здравствуйте, Vain, Вы писали:

V>Почему, число то одно и тоже.

тип константы у флоат поменялся
Re[4]: Константы во float.h
От: Vain Россия google.ru
Дата: 27.12.07 16:04
Оценка:
Здравствуйте, Programador, Вы писали:

V>>Почему, число то одно и тоже.

P>тип константы у флоат поменялся
да, но он мне указал на DBL_EPSILON
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Константы во float.h
От: oziro Нигерия  
Дата: 27.12.07 16:11
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, Programador, Вы писали:


V>>>Почему, число то одно и тоже.

P>>тип константы у флоат поменялся
V>да, но он мне указал на DBL_EPSILON

Тогда я пас, я тебя не понимаю

PS Это все антинаучно и софистика. Если ты увеличил точность якобы для значения DBL_EPSILON — значит это уже другой тип, не дабл, и епсилон у него будет другой, соответственно порядок тоже другой — я так думаю.
Re[6]: Константы во float.h
От: Vain Россия google.ru
Дата: 27.12.07 16:32
Оценка:
Здравствуйте, oziro, Вы писали:

V>>>>Почему, число то одно и тоже.

P>>>тип константы у флоат поменялся
V>>да, но он мне указал на DBL_EPSILON

O>Тогда я пас, я тебя не понимаю

взаимно

O>PS Это все антинаучно и софистика. Если ты увеличил точность якобы для значения DBL_EPSILON — значит это уже другой тип, не дабл, и епсилон у него будет другой, соответственно порядок тоже другой — я так думаю.

Имхо, какой тип у флота должен судить компилятор, а не программер, дабы не быть себе злым буратиной
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: Константы во float.h
От: oziro Нигерия  
Дата: 27.12.07 17:08
Оценка:
Здравствуйте, Vain, Вы писали:

O>>Тогда я пас, я тебя не понимаю

V>взаимно


Я все таки докапаюсь

V>#define DBL_EPSILONd    2.2204460492503130808472633361816e-16


Какого типа T должна быть переменная foo_float

T foo_float = DBL_EPSILONd;

что бы полностью представить твое число?
Re[8]: Константы во float.h
От: Vain Россия google.ru
Дата: 27.12.07 19:06
Оценка:
Здравствуйте, oziro, Вы писали:

O>

O>Я все таки докапаюсь

O>
V>>#define DBL_EPSILONd    2.2204460492503130808472633361816e-16
O>


O>Какого типа T должна быть переменная foo_float


O>
O>T foo_float = DBL_EPSILONd;
O>

O>что бы полностью представить твое число?
вы действительно не поняли

вот пример, что будет вычислено компилятором точнее:
DBL_EPSILON+DBL_EPSILON+DBL_EPSILON+DBL_EPSILON+DBL_EPSILON+и т.д.

или это
DBL_EPSILONd+DBL_EPSILONd+DBL_EPSILONd+DBL_EPSILONd+DBL_EPSILONd+и т.д.

?

Имхо константы должны быть представлены с максимальной точностью, чтобы дать возможность компилятору позаботиться об округлении.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: Константы во float.h
От: Кодт Россия  
Дата: 28.12.07 12:30
Оценка:
Здравствуйте, Vain, Вы писали:

V>Имхо константы должны быть представлены с максимальной точностью, чтобы дать возможность компилятору позаботиться об округлении.


Если ты не занимаешься кросс-компиляцией для платформы, где double — не IEEE-шное, а какое-то своё, то эти фокусы бесполезны.
1) Нет никаких причин компилятору хранить литерал в более широком формате, чем тип этого литерала. (В данном случае long double против double).
2) Для вещественных чисел MAX, MIN и EPSILON играют скорее справочную роль. В арифметике они всё равно не встретятся.
3) А если и встретятся, то погрешности вычислений, связанные с преобразованиями float (в переменной) <-> double (в подвыражении) <-> long double (внутри FPU), обусловленные и разными оптимизациями, и флагами FPU, напрочь перекроют якобы точный хвост дроби.
4) Наконец, разработчики компилятора могли проверить, что компилятор правильно парсит DBL_EPSILON и правильно считает формулы с ним (например, e+e = e*2). Всё-таки преобразование десятичной дроби в двоичную сопряжено с погрешностями, которые могут скомпенсироваться, а могут и усилиться.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Константы во float.h
От: Vain Россия google.ru
Дата: 28.12.07 13:43
Оценка:
Здравствуйте, Vain, Вы писали:

V>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:

На мой вопрос так никто и не ответил
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: Константы во float.h
От: Programador  
Дата: 28.12.07 16:12
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, Vain, Вы писали:


V>>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:

V>На мой вопрос так никто и не ответил

float x=
 ( 1.00000000000000000000000000000000000500000000000000000000000
  -1.00000000000000000000000000000000000200000000000000000000000
 )*1000000000000000000000000000000000000.00000000000000000000000000000;

посмотри чему х равно, мне почемуто кажется что 0 а не 2.000000000000000000000000000000000000000000000000
Re[3]: Константы во float.h
От: Vain Россия google.ru
Дата: 28.12.07 16:56
Оценка:
Здравствуйте, Programador, Вы писали:

V>>>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:

V>>На мой вопрос так никто и не ответил

P>
P>float x=
P> ( 1.00000000000000000000000000000000000500000000000000000000000
P>  -1.00000000000000000000000000000000000200000000000000000000000
P> )*1000000000000000000000000000000000000.00000000000000000000000000000; 
P>

P>посмотри чему х равно, мне почемуто кажется что 0 а не 2.000000000000000000000000000000000000000000000000
А почему имеено 2, да ещё с таким кол-вом нулей после запятой?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: Константы во float.h
От: Programador  
Дата: 28.12.07 17:11
Оценка: :)
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, Programador, Вы писали:


V>>>>Меня интересует, правильно ли я посчитал значения некоторых констант, которые можно найти во float.h:

V>>>На мой вопрос так никто и не ответил

P>>
P>>float x=
P>> ( 1.00000000000000000000000000000000000500000000000000000000000
P>>  -1.00000000000000000000000000000000000200000000000000000000000
P>> )*1000000000000000000000000000000000000.00000000000000000000000000000; 
P>>

P>>посмотри чему х равно, мне почемуто кажется что 0 а не 2.000000000000000000000000000000000000000000000000
V>А почему имеено 2, да ещё с таким кол-вом нулей после запятой?
нули? для точности
Re[2]: Константы во float.h
От: SWW Россия  
Дата: 28.12.07 17:40
Оценка:
Здравствуйте, Vain, Вы писали:

V>На мой вопрос так никто и не ответил


Ты тоже. Тебя спрашивали какой в этом смысл, ведь в double все равно не помещается больше 12 десятичных значащих цифр. А для тех констант которые ты привел увеличивать точность вообще не имеет смысла.
Re[3]: Константы во float.h
От: Vain Россия google.ru
Дата: 28.12.07 17:47
Оценка:
Здравствуйте, SWW, Вы писали:

V>>На мой вопрос так никто и не ответил

SWW>Ты тоже. Тебя спрашивали какой в этом смысл, ведь в double все равно не помещается больше 12 десятичных значащих цифр. А для тех констант которые ты привел увеличивать точность вообще не имеет смысла.
Я не увеличиваю точность, мне интересно правильно ли я посчитал число-константу.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: Константы во float.h
От: Аноним  
Дата: 18.01.08 09:11
Оценка:
Здравствуйте, Vain, Вы писали:

V>Я не увеличиваю точность, мне интересно правильно ли я посчитал число-константу.


Можно алгоритм по которому вы рассчитали константы?
Можно узнать — вы понимаете что епсилон привязан к типу с которым он используется и для которого рассчитан?
Вы понимаете что дальнейшее увеличение точности не приведет ни к чему для конкретного типа double?
И кстати, если я правильно помню — не имеет смысла сравнивать с удвоеным епсилоном , можно свести с одному епсилону
Re[5]: Константы во float.h
От: Vain Россия google.ru
Дата: 18.01.08 11:39
Оценка:
Здравствуйте, Аноним, Вы писали:

V>>Я не увеличиваю точность, мне интересно правильно ли я посчитал число-константу.

А>Можно алгоритм по которому вы рассчитали константы?
k=M*2^P
А>Можно узнать — вы понимаете что епсилон привязан к типу с которым он используется и для которого рассчитан?
Насколько я понимаю, эпсилон привязан к мантиссе.
А>Вы понимаете что дальнейшее увеличение точности не приведет ни к чему для конкретного типа double?
Для double — может и не приведёт, но для long double вполне может.
А>И кстати, если я правильно помню — не имеет смысла сравнивать с удвоеным епсилоном , можно свести с одному епсилону
Где удвоенный эпсилон?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.