бага в распечатке double
От: _Winnie Россия C++.freerun
Дата: 01.10.05 23:36
Оценка: :)
int main()
{

    //2^1000  
    double d1 = 
        10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376.0;

    long long d_int =
        (1023LL + 1000LL) << 52; 
    double d2 = *(double*)&d_int; //тоже самое.

    assert(d1 == d2);

    {

        std::cout <<'[' <<std::fixed << d1 <<"]\n";
        printf("[%f]\n", d1);
        int dec, sign;
        printf("[%s]\n", _fcvt(d1, 10, &dec, &sign));    //MS-specific, the base primitive convertion function
    }
}


MSVC:

[10715086071862673000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000.000000]
[10715086071862673000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000.000000]
[10715086071862673000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000]


GCC(MinGW):

[


Вообще вырубает поток! Вот так бага Неправильный double выключает output программы

А должен печатать
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376.000000

Вот такая вот бага. Не могут число перевести в десятичную систему счисления...
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.