Hatalar, hatalar, sorular - sayfa 1125

 

Muhtemelen hesaplama hatası (MT\930\32)

 void OnStart ()
{
         int j = 1 ;
         for ( ulong i = 0 ; i < ULONG_MAX ; i++ )
                j = -j;
         Print ( "j=" , j ); //результат j=1, а должен быть j=-1
}

Tabii ki kendim saymadım ama i -> j = -1 ve son i = 18446744073709551615/* için bile ULONG_MAX */ -1 -> hatta

 
A100 :

Muhtemelen hesaplama hatası (MT\930\32)

Tabii ki kendim saymadım ama i -> j = -1 ve son i = 18446744073709551615/* için bile ULONG_MAX */ -1 -> hatta

Senaryonuzu denedim.

Yazdırma, grafiğe katıldıktan sonra bir anda gerçekleşir. Kontrol hiç döngüye aktarılmamış gibi geliyor.

 
Fleder :

Kontrol hiç döngüye aktarılmamış gibi geliyor.

Gerçekten öyle ama çabuk :)
 
void OnStart ()
{
         int j = 1 ;
         for ( int i = 0 ; i < INT_MAX ; i++ )
                j = -j;
         Print ( "j=" , j );
}
Ve çok daha yavaş...
 
A100 :
Gerçekten öyle ama çabuk :)

Hafızam bana hizmet ediyorsa, o zaman derleyicinin önceki sürümleri ayarlama girişiminde "lanetli"

döngüde çok fazla yineleme (LONG_MAX ve ULONG_MAX ) ve şimdi derleyici sessiz...

910 32 bit sürümüne sahibim.

 

Sessizdir ve şöyle bile "hızlı sayar":

 void OnStart ()
{
         int j = 1 ;
         for ( int i = 0 ; i < ULONG_MAX ; i++ )
                j = -j;
         Print ( "j=" , j );
Her ne kadar teorik olarak sonsuz bir döngüye girmelidir.
 

Yemin etmenin gerekli olmadığı ve kavga etmenin gerekli olduğu yerde - sessizdir.

Davranışları!

 
Fleder :

Hafızam bana hizmet ediyorsa, o zaman derleyicinin önceki sürümleri ayarlama girişiminde "lanetli"

döngüde çok fazla yineleme (LONG_MAX ve ULONG_MAX ) ve şimdi derleyici sessiz...

Genel olarak, derleyici yineleme sayısını bilemez.

 int f( ulong max )
{
         int j = 1 ;
         for ( ulong i = 0 ; i < max; i += ULONG_MAX )
                j = 0;
        return ( j );
}
void OnStart ()
{
         ulong max = ULONG_MAX ;
         Print ( "j=" , f( max )); //результат j=1, а должно быть j=0
}
 
A100 :

Genel olarak, derleyici yineleme sayısını bilemez.

Doğru olan doğrudur. Yani bu bir çalışma zamanı hatasıdır .
 
Belki for operatörü , kontrol edilen ifadede 8 baytlık sayıları sevmiyordur?