Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему double тип такой не точный????

2.2K
23 октября 2007 года
0cool
54 / / 15.06.2006
Здравствуйте.

Подскажите, пожалуйста, в чем проблема...

Я написал функцию, которая переводит double в строку, представленную в любой системе счисления(2-36). Но проблема в том, что когда я передаю в нее большое число оно возвращает мне число, которое больше. Алгоритм правильный, возможно, это из-за того, что я использую Math.Pow.
Объясните, неужели, double такой неточный. Как сделать чтобы вычисления были точнее.

Вот код функции (может поможет)

Код:
private char[] digits = {
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
        'U', 'V', 'W', 'X', 'Y', 'Z' };

private string translate(double num, int radix)
        {
            string res = "";
            double quotient = 0, remainder=0;
                       
            quotient=Math.Floor(num);

            do
            {
                quotient=divRem(quotient, radix, out remainder);                
                res = res.Insert(0, digits[(int)remainder].ToString());
            } while (quotient != 0);

           
            return res;
        }

         private double divRem(double a, double b, out double  rem)//возвращает частное, rem - остаток
        {
            rem = a % b;
            return (a - rem) / b;
        }

P.S Может кто знает функцию, которая возвращает остаток от деления двух double (MAth.IEEERemainder как-то некорректно работает- пришлось написать свою(может это из-за нее???))
240
23 октября 2007 года
aks
2.5K / / 14.07.2006
Почитай об арифметике чисел с чиплавающей точкой, и их представлении в памяти.
5
23 октября 2007 года
hardcase
4.5K / / 09.08.2005
Нужна точность? Используй System.Decimal или просто decimal в C#:
Цитата:
The decimal keyword denotes a 128-bit data type. Compared to floating-point types, the decimal type has a greater precision and a smaller range, which makes it suitable for financial and monetary calculations.


Диапазон представляемых значений:

 
Код:
±1.0 × 10e−28 to ±7.9 × 10e28

при точности в 28-29 знаков.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог