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
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.
# 5 CTP uyumsuz C: neden iç "devl...
Neden GCC neredeyse aynı C kodu için t...
Neden Python kodu derlemek?...
Aşağıdaki Modül hata ayıklama bilgisi ...
Aşırı SQL Server veritabanı çevrimdışı...