ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

20.02.2010, 03:40
|
|
Познающий
Регистрация: 05.02.2010
Сообщений: 59
Провел на форуме: 360122
Репутация:
41
|
|
Как считать числа точнее
На сях флоаты и даблы нехватат.
Там до 5 знаков после зпт и всё, а мне надо штук 15 хотябы, как сделать?
|
|
|

20.02.2010, 05:54
|
|
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
Провел на форуме: 1410429
Репутация:
214
|
|
на руби разрядность чисел ограничиваеться лишь оперативкой и свопом т.е. фактически не чем.
а если на C то придеться самому писать класс со всеми втекающими туда операциями.
P.S. если тебе посчитать какие-то конкретные числа, то скинь мне в ПМ я на руби посчитаю
|
|
|

20.02.2010, 06:19
|
|
Участник форума
Регистрация: 17.01.2008
Сообщений: 170
Провел на форуме: 1608606
Репутация:
105
|
|
http://ru.wikipedia.org/wiki/Длинная_арифметика
пример, вычисления числа Пи http://algolist.manual.ru/maths/count_fast/pi.php
|
|
|

20.02.2010, 14:08
|
|
Новичок
Регистрация: 17.01.2010
Сообщений: 23
Провел на форуме: 118852
Репутация:
0
|
|
на руби разрядность чисел ограничиваеться лишь оперативкой и свопом т.е. фактически не чем
что-то я в этом сомневаюсь, число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности) и 8 байтов (число двойной точности), ну или 10 байтов повышенной (родной для сопроцессора)
Или в ruby все действия делаются столбиком?
Последний раз редактировалось Protorus; 20.02.2010 в 14:16..
|
|
|

20.02.2010, 14:23
|
|
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме: 4275992
Репутация:
1188
|
|
DECIMAL
http://msdn.microsoft.com/ru-ru/library/system.decimal.aspx
числа в диапазоне от 79228162514264337593543950335 до -79228162514264337593543950335
можно считать с точностью до 0,9999999999999999999999999999
|
|
|

20.02.2010, 14:37
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
Сообщение от NetSter
DECIMAL
http://msdn.microsoft.com/ru-ru/library/system.decimal.aspx
числа в диапазоне от 79228162514264337593543950335 до -79228162514264337593543950335
можно считать с точностью до 0,9999999999999999999999999999
Это .net . Речь шла о Си.
Сообщение от BastardFromHell
На сях флоаты и даблы нехватат.
Там до 5 знаков после зпт и всё, а мне надо штук 15 хотябы, как сделать?
Есть специальные библиотеки для работы с большими числами. Например, NTL
|
|
|

20.02.2010, 16:14
|
|
Познающий
Регистрация: 26.07.2005
Сообщений: 54
Провел на форуме: 47901
Репутация:
46
|
|
Сообщение от BastardFromHell
На сях флоаты и даблы нехватат.
Там до 5 знаков после зпт и всё, а мне надо штук 15 хотябы, как сделать?
Почему ты решил, что double только 5 знаков после запятой?
Педставление чисел double обеспечиват относительную точность порядка 16 знаков после запятой.
_http://ru.wikipedia.org/wiki/Число_двойной_точности
Возможно, что у тебя проблемы с выводом нужного числа знаков после запятой?
Код:
#include <iostream>
int main(){
double a=1.234567890123456;
std::cout<<a<<std::endl;
std::cout.precision(15);
std::cout<<a<<std::endl;
printf("%.14f \n",a);
return 0;
}
|
|
|

20.02.2010, 16:20
|
|
Участник форума
Регистрация: 07.04.2008
Сообщений: 166
Провел на форуме: 1116075
Репутация:
68
|
|
Сообщение от Aag
Почему ты решил, что double только 5 знаков после запятой?
Педставление чисел double обеспечиват относительную точность порядка 16 знаков после запятой.
_http://ru.wikipedia.org/wiki/Число_двойной_точности
Возможно, что у тебя проблемы с выводом нужного числа знаков после запятой?
Код:
#include <iostream>
int main(){
double a=1.234567890123456;
std::cout<<a<<std::endl;
std::cout.precision(15);
std::cout<<a<<std::endl;
printf("%.14f \n",a);
return 0;
}
printf("%.14f \n",a); он прав
в паскале можно при выводе
writeln('chislo',S:4:14) ,будет выводить 14 знаков после комы
|
|
|

20.02.2010, 16:27
|
|
Познающий
Регистрация: 05.02.2010
Сообщений: 59
Провел на форуме: 360122
Репутация:
41
|
|
угу, да, но при подсчёте и флоат и дабл округляется. Например если вот что-то типа такого считать:
Код:
#include <iostream>
using namespace std;
int main( int argc, char *argv[])
{
double x,x1 = 0;
cout << "int to start: " << endl;
cin >> x;
//f(x) = x^2 - 3
for(int i=1; i < 101; i++)
{
x1 = x - ((x*x-3)/(2*x));
x=x1;
cout << "approximation " << i << " x = " << x1 << endl;
}
return 0;
}
|
|
|

20.02.2010, 18:31
|
|
Постоянный
Регистрация: 18.11.2009
Сообщений: 709
Провел на форуме: 1410429
Репутация:
214
|
|
Сообщение от Protorus
что-то я в этом сомневаюсь, число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности) и 8 байтов (число двойной точности), ну или 10 байтов повышенной (родной для сопроцессора)
Или в ruby все действия делаются столбиком?
Про целые числа в Ruby:
Конечно, они (класс Bignum) потребляют больше памяти и выполняються несколько медленнее, тем не менее операции над очень большими целыми (тысячи знаков) реальны.
Дроби в Ruby:
Стандартная библиотека bigdecimal позволяет работать с дробями, имеющими много значащих цифр. Число храниться как массив цифр, а не преобразуеться в двоичное представление. Тем самым достижима произвольная точность, естественно, ценой замедления работы.
Цитаты из книги "Путь Ruby" Хэл Фултон, стр. 164
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|