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 как-то некорректно работает- пришлось написать свою(может это из-за нее???))
Почему double тип такой не точный????
Подскажите, пожалуйста, в чем проблема...
Я написал функцию, которая переводит double в строку, представленную в любой системе счисления(2-36). Но проблема в том, что когда я передаю в нее большое число оно возвращает мне число, которое больше. Алгоритм правильный, возможно, это из-за того, что я использую Math.Pow.
Объясните, неужели, double такой неточный. Как сделать чтобы вычисления были точнее.
Вот код функции (может поможет)
Код:
Почитай об арифметике чисел с чиплавающей точкой, и их представлении в памяти.
Цитата:
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 знаков.