SORU
23 Mayıs 2014, Cuma


Neden?bu kodu en iyi duruma getirme.

Amacı kodu, 0 ve 1 arasındaki değerleri temsil eden 32-bit kayan nokta bit desenleri toplam sayısını bulmak. Bu çalışması gerekir gibi geliyor bana, ama nedense Çınlama montaj çıktı temelde return 0; eşdeğerdir.

Çınlama 3.3 ile bu ve 3.4.1, -std=c 1y -Wall -Wextra -pedantic -O2 -std=c 1y -Wall -Wextra -pedantic -O3 Çınlama kullanarak derlenmiş

3.4 optimize her şeyi-O2 ile uzağa gider ve -O3.

Çınlama 3.3 tek-O3 ile her şeyi iyileştirir.

"Her şey" bu programın derleme çıktı yani . optimize

main:                                   # @main
    xorl    x, x
    ret
#include <limits>
#include <cstring>
#include <cstdint>

template <class TO, class FROM>
inline TO punning_cast(const FROM &input)
{
    TO out;
    std::memcpy(&out, &input, sizeof(TO));
    return out;
}

int main()
{
    uint32_t i = std::numeric_limits<uint32_t>::min();
    uint32_t count = 0;

    while (1)
    {
        float n = punning_cast<float>(i);
        if(n >= 0.0f && n <= 1.0f)
            count  ;
        if (i == std::numeric_limits<uint32_t>::max())
            break;
        i  ;
    }

    return count;
}

CEVAP
23 Mayıs 2014, Cuma


Sadece yorum trenin sonuna kadar bu ilan ederdim ama yeterince itibar henüz yok. :)

İşte derleyici bir hata olduğunu gösteren basit bir test çalışması:

http://coliru.stacked-crooked.com/a/58b3f9b4edd8e373

#include <cstdint>

int main()
{
    uint32_t i = 0;
    uint32_t count = 1;

    while (1)
    {
        if( i < 5 )
            count =1;

        if (i == 0xFFFFFFFF)
            break;
        i  ;
    }

    return count; // should return 6
}

Kurul 6 yerine 1, çıkışlar gösteriyor. Sonsuz bir döngü bu durumda Kurul asıl dönüş yok ya, bence değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ELawshea

    ELawshea

    26 Mayıs 2008
  • Propaganda Time

    Propaganda T

    19 EYLÜL 2010
  • Viktorija A.

    Viktorija A.

    28 Mart 2009

İLGİLİ SORU / CEVAPLAR