Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Как считать числа точнее (https://forum.antichat.xyz/showthread.php?t=180326)

BastardFromHell 20.02.2010 03:40

Как считать числа точнее
 
На сях флоаты и даблы нехватат.
Там до 5 знаков после зпт и всё, а мне надо штук 15 хотябы, как сделать?

lukmus 20.02.2010 05:54

на руби разрядность чисел ограничиваеться лишь оперативкой и свопом т.е. фактически не чем.
а если на C то придеться самому писать класс со всеми втекающими туда операциями.
P.S. если тебе посчитать какие-то конкретные числа, то скинь мне в ПМ я на руби посчитаю

Fuckel 20.02.2010 06:19

http://ru.wikipedia.org/wiki/Длинная_арифметика
пример, вычисления числа Пи http://algolist.manual.ru/maths/count_fast/pi.php

Protorus 20.02.2010 14:08

Цитата:

на руби разрядность чисел ограничиваеться лишь оперативкой и свопом т.е. фактически не чем
что-то я в этом сомневаюсь, число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности) и 8 байтов (число двойной точности), ну или 10 байтов повышенной (родной для сопроцессора)
Или в ruby все действия делаются столбиком?

NetSter 20.02.2010 14:23

DECIMAL

http://msdn.microsoft.com/ru-ru/library/system.decimal.aspx

числа в диапазоне от 79228162514264337593543950335 до -79228162514264337593543950335
можно считать с точностью до 0,9999999999999999999999999999

Forcer 20.02.2010 14:37

Цитата:

Сообщение от NetSter
DECIMAL

http://msdn.microsoft.com/ru-ru/library/system.decimal.aspx

числа в диапазоне от 79228162514264337593543950335 до -79228162514264337593543950335
можно считать с точностью до 0,9999999999999999999999999999

Это .net . Речь шла о Си.

Цитата:

Сообщение от BastardFromHell
На сях флоаты и даблы нехватат.
Там до 5 знаков после зпт и всё, а мне надо штук 15 хотябы, как сделать?

Есть специальные библиотеки для работы с большими числами. Например, NTL

Aag 20.02.2010 16:14

Цитата:

Сообщение от 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;
}


Olegros911 20.02.2010 16:20

Цитата:

Сообщение от 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 знаков после комы

BastardFromHell 20.02.2010 16:27

угу, да, но при подсчёте и флоат и дабл округляется. Например если вот что-то типа такого считать:
Код:

#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;
}


lukmus 20.02.2010 18:31

Цитата:

Сообщение от Protorus
что-то я в этом сомневаюсь, число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности) и 8 байтов (число двойной точности), ну или 10 байтов повышенной (родной для сопроцессора)
Или в ruby все действия делаются столбиком?

Про целые числа в Ruby:
Цитата:

Конечно, они (класс Bignum) потребляют больше памяти и выполняються несколько медленнее, тем не менее операции над очень большими целыми (тысячи знаков) реальны.
Дроби в Ruby:
Цитата:

Стандартная библиотека bigdecimal позволяет работать с дробями, имеющими много значащих цифр. Число храниться как массив цифр, а не преобразуеться в двоичное представление. Тем самым достижима произвольная точность, естественно, ценой замедления работы.
Цитаты из книги "Путь Ruby" Хэл Фултон, стр. 164


Время: 00:13