Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Машинный нуль. / 19 сообщений из 19, страница 1 из 1
27.10.2005, 20:21
    #33348716
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Расскажите, что знаете. Как это победить?

Если кто не знает, что это такое, то скомпиляйте и исполните сие и всё поймёте.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
/***************************************************************************
 *   Copyright (C) 2005 by Miha                                            *
 *   sarin@sarin                                                           *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	
	float zero =  1 ;
	double doubleZero =  1 ;
	long double longDoubleZero =  1 ;
	int i =  0 ;
	
	while ( 1  < ( 1  + zero)){
		i++;
		zero = zero /  2 ;
	}

	printf("size of \"zero\": %d\nzero: %e\titerations: %d\n", sizeof(zero), zero, i);
	
	while ( 1  < ( 1  + doubleZero)){
		i++;
		doubleZero = doubleZero /  2 ;
	}

	printf("size of \"doubleZero\": %d\ndoubleZero: %e\titerations: %d\n", sizeof(doubleZero), doubleZero, i);
	
	while ( 1  < ( 1  + longDoubleZero)){
		i++;
		longDoubleZero = longDoubleZero /  2 ;
	}

	printf("size of \"longDoubleZero\": %d\nlongDoubleZero: %e\titerations: %d\n", sizeof(longDoubleZero), longDoubleZero, i);

  return EXIT_SUCCESS;
}

...
Рейтинг: 0 / 0
27.10.2005, 21:17
    #33348760
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Чего победить-то?
Машинный нуль -- это фундаментальное свойство машинных вычислений с плавающей точкой. Зависит от точности типа данных. Обычно никому не мешает, так как никто с такими числами не работает. Накопление погрешностей вычислений - отдельный вопрос.
При компиляции на компиляторах Microsoft результаты для double и long double будут совпадать. (в MSDN описано, что эти типы эквивалентны).
При компиляции на Borland long double будет 10 байт (собственно истинная точность сопроцессора и есть 80 бит).
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
27.10.2005, 22:35
    #33348850
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Я компилял на gcc.
Вот результаты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
size of "zero":  4 
zero:  5 .421011e- 20       iterations:  64 
size of "doubleZero":  8 
doubleZero:  5 .421011e- 20         iterations:  128 
size of "longDoubleZero":  12 
longDoubleZero: - 0 .000000e+ 00    iterations:  16319 

С такими числами приходится работать при численном решении разной лыбуды.

Откуда появляется эта байда?

Расскажите, кто что знает.
...
Рейтинг: 0 / 0
28.10.2005, 14:13
    #33349925
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
SarinЯ компилял на gcc.
Вот результаты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
size of "zero":  4 
zero:  5 .421011e- 20       iterations:  64 
size of "doubleZero":  8 
doubleZero:  5 .421011e- 20         iterations:  128 
size of "longDoubleZero":  12 
longDoubleZero: - 0 .000000e+ 00    iterations:  16319 

С такими числами приходится работать при численном решении разной лыбуды.

Откуда появляется эта байда?

Расскажите, кто что знает.

Для вещественных чисел используется двоичная система счисления и принята форма представления чисел с плавающей точкой X = M2^P, M = +-(k1*2^-1 + k2*2^-2+...+kn*2^-t). Здесь M - мантисса, p-целое число называемое двоичным порядком. Количество t цифр, которое отводится для записи мантиссы, называется разрядностью мантиссы. Диапазон представления чисел в ЭВМ ограничен конечной разрядностью мантиссы и значением числа p. Все представимые числа на ЭВМ удовлетворяют неравенствам: 0 < X0 < X < Xбеск, где x0=2^(-pmax+1), Xбеск = 2^Pmax. Все числа, по модулю большие Xбеск, не представимы на ЭВМ и рассматриваются как машинная бесконечность. Все числа, по модулю меньшие X0, для ЭВМ не отличаются от нуля и рассматриваются как машинный нуль. Машинным эпсилон называется относительная точность ЭВМ, то есть граница относительной погрешности представления чисел в ЭВМ. Нашли вы не машинный нуль, а машинный эпсилон.

Если вы при численных методах получаете такие числа, значит методы применять другие, так как в результате погрешности превзойдут значимость результатов. Такое может появляться на плохо обусловленных матрицах, тогда матрицы приводятся к более "нормированному" виду.
...
Рейтинг: 0 / 0
28.10.2005, 18:03
    #33350684
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Спасибо большое. Где почитать про представление вещественных чисел в машине?
...
Рейтинг: 0 / 0
28.10.2005, 18:06
    #33350693
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Ещё вопрос:
Код: plaintext
1.
2.
size of "longDoubleZero":  12 
longDoubleZero: - 0 .000000e+ 00    iterations:  16319 
это ему разрядов не хватило? Фактически компуктер сказал, что машинный эпсилон = 0.
...
Рейтинг: 0 / 0
28.10.2005, 18:11
    #33350701
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Привет, Sarin!
Ты пишешь:

SarinГде почитать про представление вещественных чисел в машине?
У патриархов.
http://www2.hursley.ibm.com/decimal/decifaq.html

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
28.10.2005, 18:51
    #33350793
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Мимопроходящий
Привет, Sarin!
Ты пишешь:


У патриархов.
http://www2.hursley.ibm.com/decimal/decifaq.html

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
А на великом и могучем есть?
...
Рейтинг: 0 / 0
28.10.2005, 18:53
    #33350801
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Привет, Sarin!
Ты пишешь:

Sarin Мимопроходящий http://www2.hursley.ibm.com/decimal/decifaq.html
S> А на великом и могучем есть?Так оно и есть.
На великом и могучем английском языке.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
28.10.2005, 18:57
    #33350809
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Да мнеб на великом и могучем русском
...
Рейтинг: 0 / 0
28.10.2005, 18:59
    #33350815
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Привет, Sarin!
Ты пишешь:

Sarin S> Да мнеб на великом и могучем русскомЭкая блажь...
Ты ж программер, или где?!

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
28.10.2005, 20:54
    #33350943
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Да я англицкий нормально знаю. Но читать предпочитаю на русском.

По возможности.
...
Рейтинг: 0 / 0
28.10.2005, 21:00
    #33350946
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
SarinЕщё вопрос:
Код: plaintext
1.
2.
size of "longDoubleZero":  12 
longDoubleZero: - 0 .000000e+ 00    iterations:  16319 
это ему разрядов не хватило? Фактически компуктер сказал, что машинный эпсилон = 0.

Просто при вычислениях с истинной разрядностью сопроцессора так оно и бывает. Все остальное от урезанной мантиссы.
...
Рейтинг: 0 / 0
28.10.2005, 21:40
    #33350962
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Lelikk
Просто при вычислениях с истинной разрядностью сопроцессора так оно и бывает. Все остальное от урезанной мантиссы.
???
...
Рейтинг: 0 / 0
03.11.2005, 11:57
    #33359670
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
SarinСпасибо большое. Где почитать про представление вещественных чисел в машине? тут .
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
16.12.2006, 17:53
    #34205062
Машинный нуль.
НАРОД!! помогите мне плиииз! мне надо посчитать машинный нуль для нуля! Именно посчитать! а не просто вставить число наименьшее для данного типа...
...
Рейтинг: 0 / 0
16.12.2006, 18:00
    #34205068
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Sarin
float zero = 1;
Надо сказать, у автора этой строки есть определенное чувство юмора :)
...
Рейтинг: 0 / 0
18.12.2006, 11:32
    #34206746
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
Горе-программерНАРОД!! помогите мне плиииз! мне надо посчитать машинный нуль для нуля!пишешь flat zero=1; и в цикле делишь его на два, пока не надоест.
...
Рейтинг: 0 / 0
04.01.2007, 17:38
    #34237233
kZ25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Машинный нуль.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Машинный нуль. / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]