• 2
  • 3
2020-01-20, 06:16
  #25
Medlem
Citat:
Ursprungligen postat av grabb1948
Vissa berkningar beror helt p ordningen de utfrs i.
int a= 10*1/3.
Om nu 1 delas med 3 fr man heltalet 0 som ger a= 10*0=0.
Dremot ger 10*1 =10 som ger a= 3 efter division.
Detta "problem" fixas vid optimering men troligen ven vid "out of order".

Med parenteser s kan du f kompilatorn att ta en annan ordning, den innersta parentesen brukar tas frst, operatorn * och / gr fre + och minus. Se dokumentationen om operandernas ordning
Citera
2020-12-04, 04:25
  #26
Medlem
Bumpar trden:
Citat:
Ursprungligen postat av SittFint
Kompilatorn r fri att spotta ur sig vilken maskinkod som helst s lnge dess observerbara beteende inte frndras. Det inkluderar att ta bort dd kod. Och om din kod innehller ngot som r UB s fr den spotta ur sig exakt vad som helst.
UB =Undefined Behaviour, Odefinierat Beteende. Japp vi hade en diskussion fr riktigt mnga r sedan med tex Bjarne Stroustrup och Linus Torvalds. Och slutsatsen av den diskussionen var att det gr inte attt skriva en kompilator som bde ska klara av att kompilera korrekt kod, och som dessutom kan lra en newbie att programmera. Det gr inte att utifrn de mjliga kombinationer av kod som "ser bra ut" men som r felaktig, att dessutom kunna designa ett varnings/error-meddelande som gr att newbies frstr vilket fel de gr.
Inte minst gller detta tex deklarationen av templates, vilket blir extra konstig felutskrift pga att headerfilerna r uppbyggda som de r. Om man tex har skrivit initieringsdeklarationen felaktigt.

Sledes s lter tesen som s att r koden felaktigt skriven s fr kompilatorn spotta ur sig vad som helst. Ett tag s pgick det tvlingar i att skriva s genomusel C-kod att datorn och kompilatorn skulle g bananas, och den som fick de flesta felutskrifterna vann. De andra fick bjuda p l frsts.
Bde kompilatorn skulle g bananas helst och ven nr koden krdes sedan.
Dessa "experiment" krdes frsts p virtuella maskiner s man enkelt kunde terminera dem.

Annars s kunde de ju dra ner hela OSet i ett slags "koma" ett katatoniskt tillstnd. Men d blev ju risken stor fr frlust av filer, dvs de flushades inte, och stngdes inte korrekt.
Mycket av POSIX-standarden gr ut p att undvika sdana tillstnd. Men var man tillrckligt kreativ p jvelskap s gick det ibland nd, hehe

Vi lyckades vid ngot tillflle f en kompilator att riktigt g bananas, i en ondlig loop. Och den buggen vart rttad, frsts. Minns dock ej riktigt hur det var, men kompilatorn frvntade sig att hitta ett radslut i main, vilket jag p rent jvelskap hade tagit bort. En annan gng tvingade vi fram en ondlig rekursion pga att kompilatorn med nstlade #if och #includes fastnade i en sdan loop.
Nu tror jag att alla vldesignade kompilatorer terminerar sdana loopar sjlv. Lngesedan jag testade.
Citat:
Ursprungligen postat av DieTrolle
Jag frstr inte riktigt vad du hller p med. Du skriver felaktig kod och sedan frsker du dra slutsatser av resultatet som mnga gnger blir odefinierat p g a den felaktiga koden... Ibland s gr koden att kra d kompilatorn optimerat bort buggarna. Knns bara snurrigt. Kanske du borde lra dig att skriva korrekt kod istllet fr att slsa bort din tid p dessa i mitt tycke rena strunttesterna.
Mer till din frga
Kod:
    w= b/z6;
a m vara knt men det r inte z6...
Koden r ju i princip undefined eftersom flera variabler i din kod r odefinierade vid start. Med odefinierad menar jag att enligt C/C++ standarden inte automatiskt initierar nya variabler till noll. Utan de kan innehlla vilka vrden som helst. Du mste allts se till att explicit (= uttryckligen) definiera varje variabel till ett knt vrde.
Undantaget utgr globala variabler som brukar initieras till noll ,ven om du inte ger dem ngot vrde (beror dock p vilken utgva av C-kompilator, och vilket OS som krs, vet ej hur det ligger till med de tidiga C++, detta beror p att man tog ltt p uttrycket "standard" i standard C, det kunde allts vara lite hur som helst med sdant).

Varje krning kan drmed i princip bli mycket olika, s frgan om olika typer av optimeringar saknar (nstan) betydelse.

Vid sdana jmfrelser s br man ha en grundfrutsttning, grundkonfiguration att utg ifrn.
Som man sedan jmfr med i de olika utfallen.
Det blir i regel ett stort antal variabler i kringmiljn att ta hnsyn till.
P tex en vanlig Windows PC snurrar ett stort antal systemprocesser samtidigt med att CPU-load varierar kraftigt frn tillflle till tillflle.
S man br se till att man har en relativt "ren maskin" att utg ifrn.
PCn r liksom en ganska lmsk milj p det viset att du har ingen som helst kontroll ver hur mycket CPU-load dina systemprocesser och andra program tar frn tillflle till tillflle.
Och drfr kan mtvrdena bli rejlt "skeva" eller "tiltade"(*).
Man skulle kanske kunna tro att genom att kra programmet genom debuggern/profilern s skulle man f ett rttvist mtvrde, men debuggern ger ingen garanti den heller.

Vill man ha ngot riktigt rttvisande s mste man kra sina testprogram i virtuella maskiner som kontrolleras extra noggrant. Men mtvrdet ska d egentligen ges i CPU-cykler.

Ett tips dock, float defaultar (= frutbestms) i vissa (nu nstan alla) miljer till att rkna doubles istllet fr float. Detta eftersom (32-bit) float har otillrcklig precision fr de allra flesta ndaml.
Drfr br man deklarera alla floats som doubles.
Men fr tex grafik s anvnds (32-bit) floats frekvent, och duger bra till det.
Double str fr double precision och r definitionsmssigt 64-bits, men internt p alla Intel x86 av senare modell rknar internt med 80-bits (extended) precision.

Frgan om optimering r lnsamt eller inte gr inte att avgra utifrn koden som sdan.
Det gr bara att testa sig fram.
Den frsta optimeringen man genomfrde hos digitala maskiner var att infra extra register som man kunde lagra mellanresultat i tex en utrkning i.
Och en lng utrkning med mnga tecken och parenteser krs ibland baklnges, dvs de sista uttrycket krs frst.
Eller ibland krs det "innersta uttrycket" frst, dvs i typ i ett lngt uttryck med parenteser.
Nrap all optimering utgick frn de principerna som har med utrkningar att gra.
Mnga bibliotek tex math.h kan ha en massa extra hjlpvariabler inne i biblioteket.
Och tex i trigonometrin s kan man kra med tabelluppslagning istllet, beroende p vilken noggrannhet man efterstrvar.

Det hr snacket om att optimera hit och dit, det r s mycket programmerarna tar fr sjlvklart idag. Tex begreppen heap och stack fanns inte fr riktigt lnge sedan. Programmen man skrev hade allts inte tillgng till dessa, pga att minnesutrymmet var s in i helvete litet. Utan man fick i stort sett skriva det frn scratch, och pilla med de register som fanns.
En hel del av de registerna de teranvndes d till en mngd ndaml.
Drfr s sg koden i regel rent fr jvlig ut, typ olslig.

C-sprket var s att sga nydanande eftersom det frutsatte att heap och stack fanns frn brjan, och att det var operativsystemet som fixade det. Programmeraren skulle vanligen inte behva tnka p den petitessen.
Men det gjorde ibland att nr man var tvungen att optimera koden bttre, man var tvungen att grotta ner sig i dessa detaljer. Till ren frbannelse fr de programmerare som efter ngra r skulle lgga till nya funktioner och rtta buggar.

Nr man hller p med optimeringar och programmering s ska man alltid komma ihg "att en kedja r aldrig starkare n sin svagaste lnk". Och en hel massa hnsyn mste man ta nr man nrmar sig maximal prestanda. Tyvrr s r det inte alltid mjligt att frutse i frvg var taket finns ngonstans. Utan det finns gott om programmeringsprojekt som avslutats i frtid pga att man kunde rkna ut i slutndan att prestandan inte rcker.

(*) Uttrycket tiltad, lutande kommer frn d man spelade flipperspel, och det kunde man luta s att kulan, danken fll in i rtt fra. Senare s satte tlllverkarna dit en sensor som ls "TILT", och stoppade pongrkningen.
Citera
2020-12-04, 09:52
  #27
Medlem
SittFints avatar
Citat:
Ursprungligen postat av NegerStryparen
Koden r ju i princip undefined eftersom flera variabler i din kod r odefinierade vid start. Med odefinierad menar jag att enligt C/C++ standarden inte automatiskt initierar nya variabler till noll. Utan de kan innehlla vilka vrden som helst. Du mste allts se till att explicit (= uttryckligen) definiera varje variabel till ett knt vrde.
Undantaget utgr globala variabler som brukar initieras till noll ,ven om du inte ger dem ngot vrde (beror dock p vilken utgva av C-kompilator, och vilket OS som krs, vet ej hur det ligger till med de tidiga C++, detta beror p att man tog ltt p uttrycket "standard" i standard C, det kunde allts vara lite hur som helst med sdant).
Globala och statiska variabler initieras alltid till noll automatiskt om de inte initieras implicit. Har du ngot exempel p kompilatorer som inte gr det? Jag skulle gissa att du mste hitta en kompilator som antingen r vldigt gammal eller rtt obskyr i ngot avseende.

Citat:
Ett tips dock, float defaultar (= frutbestms) i vissa (nu nstan alla) miljer till att rkna doubles istllet fr float. Detta eftersom (32-bit) float har otillrcklig precision fr de allra flesta ndaml.
Drfr br man deklarera alla floats som doubles.
Men fr tex grafik s anvnds (32-bit) floats frekvent, och duger bra till det.
Double str fr double precision och r definitionsmssigt 64-bits, men internt p alla Intel x86 av senare modell rknar internt med 80-bits (extended) precision.
Nja, standarden ger minimikrav p dessa typer. En double r inte definierad till 64 bit. Det r minimikravet.

Citat:
C-sprket var s att sga nydanande eftersom det frutsatte att heap och stack fanns frn brjan, och att det var operativsystemet som fixade det.
Inte sant. Visserligen frutstter C att malloc gr att anvnda, men orden heap och stack frekommer inte verhuvudtaget i standarden.

Men bra, roligt och informativt inlgg i vrigt.
__________________
Senast redigerad av SittFint 2020-12-04 kl. 09:59.
Citera
2020-12-04, 10:43
  #28
Medlem
Min tanke frn brjan var att hitta ett program som visar skillnaden mellan mina olika Raspberry Pi & Tinker Board eftersom vissa har "out of order" men andra saknar detta. D visste jag inte att division gr via software p ARM1176 s att detta dominerar fr alla 32bitars Raspberry Pi (om man dividerar).
Nu har jag detta program:

Kod:
#include <ctime>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
  
  int  a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0, n=0;
  int  o=0, p=0, q=0, r=0, s=0, t=0, u=0, v=0, w=0, x=0, y=0, z=0;
  for (a=1; a<40; a++)
   {
      for (b=40; b>0; b--)
        {
          for (c=1; c<40; c++)
            {
             for (d=40; d>0; d--)
               {
                for (e=1; e<40; e++)
                  {
                   for (f=40; f>0; f--)
                     { 
                      if ((a==b)&& (b==c)) h=h+a*b;
                      if ((b==2*b) && (2*c==d)) k=k+e+a*f; 
                      if ((d==3*c) && (b==c)) g=g+a*b;
                      if ((c==6*d) && (b==4*a)) h=h+a*c; 
                      if ((c==5*d) && (b==5*a)) i=i+a*d; 
                      if ((e==f) && (10*b==a) && (b==c)) j=j+a*c; 
                      if ((c==5*d) && (e==3*f) && (b==2*c)) j=f+a*e; 
                      if ((c==d) && (e==f) && (b==c)) o=e+e*f; 
                      if ((c==10*d) && (e==2*f) && (b==c)) p=p+e*d; 
                      if ((a==d) && (e==f) && (b==c)) q=q+a*f; 
                     }
                 }
               }
            }
       }
   }
   
cout << "  a = " << a << "\n";
cout << "  b = " << b << "\n";
cout << "  c = " << c << "\n";
cout << "  d = " << d << "\n";
cout << "  e = " << e << "\n";
cout << "  f = " << f << "\n";
cout << "  g = " << g << "\n";
cout << "  h = " << h << "\n";
cout << "  i = " << i << "\n";
cout << "  j = " << j << "\n";
cout << "  k = " << k << "\n";

cout << "  o = " << o << "\n";
cout << "  p = " << p << "\n";
cout << "  q = " << q << "\n";

}
Om jag rknar om tidstgngen(sekunder) med alla vid 1000 MHz fr jag:
Cortex-A72(64bitar) no opt-> 104,9.... -O1-> 31,4....... -O2-> 35,0.....-O3->35,0
Cortex-A72(32bitar) no opt-> 112,2.... -O1-> 51,0....... -O2-> 46,8.....-O3->46,8
Cortex-A53(32bitar) no opt-> 283,2.... -O1->115,8...... -O2-> 103,6...-O3->103,6
Cortex-A17(32bitar) no opt-> 121,7.... -O1->55,4........ -O2-> 49,0.....-O3->49,0

Den enda som saknar "out of order" r Cortex-A53 och det mrks!
Citera
2020-12-04, 12:22
  #29
Medlem
Ingen av mina X86 saknar "out of order" s dr r det svrare att se effekten. Programmet verkar dock svrt nog fr kompilatorn. Detta r x86_64 Goldmont Plus vid 2700 MHz:
no opt ->34,7
-O1->14,3
-O2->17,2
-O3->18,5
Ltta program brukar ge en stor vinst vid -O3 men inte hr.
Citera
2021-02-02, 02:49
  #30
Medlem
Citat:
Ursprungligen postat av SittFint
Globala och statiska variabler initieras alltid till noll automatiskt om de inte initieras implicit. Har du ngot exempel p kompilatorer som inte gr det? Jag skulle gissa att du mste hitta en kompilator som antingen r vldigt gammal eller rtt obskyr i ngot avseende.


Nja, standarden ger minimikrav p dessa typer. En double r inte definierad till 64 bit. Det r minimikravet.

Inte sant. Visserligen frutstter C att malloc gr att anvnda, men orden heap och stack frekommer inte verhuvudtaget i standarden.

Men bra, roligt och informativt inlgg i vrigt.

Nej, inga aktuella men det fanns fr lngesedan, utgvor av C-kompilatorer som var betaversioner som hade en hel del konstigheter fr sig.

Hehe, sedan fanns det p ldre maskiner problemet med att "kretsarna drev". Ja de verhettades s att bittarna kunde skifta lge, typ, eller det var ngot annat elektriskt fenomen, minns ej s noga.
Det fanns inte temperatursensorer p alla kretskort i maskinen s var det fr varmt i lokalen dr maskinen stod, s kunde kretsarna brja "driva".
Man kunde framkalla ett liknande tillstnd p LED-kalkylatorer, med att snka drivspnningen. Pltsligt s hamnade kretsarna i ett instabilt lge. Eller hja drivspnningen fr mycket.
Detta blev ett strre problem ju strre minneskretsarna blev och man infrde sk ECC, som r en slags kontrollsiffra som garanterar att en byte r intakt i dess innehll. Blev ju allt viktigare fr tex kretsar som skulle sitta i satelliter. Dr strlningen r en oknd faktor, och kunde korrumpera data.

Kompilatorn som sdan frutstter ju numera alltid att den ska kunna i startsekvensen av ett valfritt exe kunna allokera bde tillrckligt med heap och stack. Men det r riktigt att begreppen inte r ndvndig fr sprket C som sdant. Men det underlttar betydligt att de finns.
Skulle ju vara rent ljligt att skriva en kompilator som kunde klara sig utan, det funkar ju inte alls.
Ja i och fr sig d att main() blev tvungen att bli en enda stor monolith utan ett enda funktionsanrop, eller komplicerad utrkning.

Citat:
Ursprungligen postat av grabb1948
Min tanke frn brjan var att hitta ett program som visar skillnaden mellan mina olika Raspberry Pi & Tinker Board eftersom vissa har "out of order" men andra saknar detta. D visste jag inte att division gr via software p ARM1176 s att detta dominerar fr alla 32bitars Raspberry Pi (om man dividerar).
Nu har jag detta program:

Kod:
#include <ctime>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
  
  int  a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0, n=0;
  int  o=0, p=0, q=0, r=0, s=0, t=0, u=0, v=0, w=0, x=0, y=0, z=0;
  for (a=1; a<40; a++)
   {
      for (b=40; b>0; b--)
        {
          for (c=1; c<40; c++)
            {
             for (d=40; d>0; d--)
               {
                for (e=1; e<40; e++)
                  {
                   for (f=40; f>0; f--)
                     { 
                      if ((a==b)&& (b==c)) h=h+a*b;
                      if ((b==2*b) && (2*c==d)) k=k+e+a*f; 
                      if ((d==3*c) && (b==c)) g=g+a*b;
                      if ((c==6*d) && (b==4*a)) h=h+a*c; 
                      if ((c==5*d) && (b==5*a)) i=i+a*d; 
                      if ((e==f) && (10*b==a) && (b==c)) j=j+a*c; 
                      if ((c==5*d) && (e==3*f) && (b==2*c)) j=f+a*e; 
                      if ((c==d) && (e==f) && (b==c)) o=e+e*f; 
                      if ((c==10*d) && (e==2*f) && (b==c)) p=p+e*d; 
                      if ((a==d) && (e==f) && (b==c)) q=q+a*f; 
                     }
                 }
               }
            }
       }
   }
   
cout << "  a = " << a << "\n";
cout << "  b = " << b << "\n";
cout << "  c = " << c << "\n";
cout << "  d = " << d << "\n";
cout << "  e = " << e << "\n";
cout << "  f = " << f << "\n";
cout << "  g = " << g << "\n";
cout << "  h = " << h << "\n";
cout << "  i = " << i << "\n";
cout << "  j = " << j << "\n";
cout << "  k = " << k << "\n";

cout << "  o = " << o << "\n";
cout << "  p = " << p << "\n";
cout << "  q = " << q << "\n";

}
Om jag rknar om tidstgngen(sekunder) med alla vid 1000 MHz fr jag:
Cortex-A72(64bitar) no opt-> 104,9.... -O1-> 31,4....... -O2-> 35,0.....-O3->35,0
Cortex-A72(32bitar) no opt-> 112,2.... -O1-> 51,0....... -O2-> 46,8.....-O3->46,8
Cortex-A53(32bitar) no opt-> 283,2.... -O1->115,8...... -O2-> 103,6...-O3->103,6
Cortex-A17(32bitar) no opt-> 121,7.... -O1->55,4........ -O2-> 49,0.....-O3->49,0

Den enda som saknar "out of order" r Cortex-A53 och det mrks!

Citat:
Ursprungligen postat av grabb1948
Ingen av mina X86 saknar "out of order" s dr r det svrare att se effekten. Programmet verkar dock svrt nog fr kompilatorn. Detta r x86_64 Goldmont Plus vid 2700 MHz:
no opt ->34,7
-O1->14,3
-O2->17,2
-O3->18,5
Ltta program brukar ge en stor vinst vid -O3 men inte hr.

Beroende p utgvor av dels kompilator och dels deras associerade libs och headers s r ju utgngen av olika optimeringar liiite svrt att jmfra. Och jmfras efter vad?
Man mste ju identifiera ett slags standardtillstnd som man jmfr med.
Frr ngra r sedan var L1-cachens storlek av stor betydelse fr hur fort ett program snurrade om det var ett stort program allts. Ifall att cache-missar intrffade frekvent, dvs CPUn var tvungen att hmta data frn det lngsammare DDR3 RAM, s syntes det tydligt p tidstgngen.
Idag r cacharna strre och DDR4 betydligt snabbare och drfr r den flaskhalsen mer eller mindre borta.

Tankeexempel: Antag att du har en kompilator med mnga fler optimeringsmjligheter, den kompilatorn kunde rentav rkna igenom din loop och frst att resultatet alltid r deterministiskt, och ger samma output fr varje krning, hr r resultatet av din kods krning, Linux gcc:

Citat:
noname@noname-HP-EliteBook-9470m:~/MyProjectsC_CPP/MyProject011/bin/Debug$ ls
MyProject011
noname@noname-HP-EliteBook-9470m:~/MyProject011/bin/Debug$ MyProject011
MyProject011: command not found
noname@noname-HP-EliteBook-9470m:~/MyProject011/bin/Debug$ ./MyProject011
a = 40
b = 0
c = 40
d = 0
e = 40
f = 0
g = 110728800
h = 1292506800
i = 1572480
j = 1534
k = 0
o = 1560
p = 88920
q = 23727600
noname@noname-HP-EliteBook-9470m:~/MyProject011/bin/Debug$


S skulle din kompilator kunna opitimera din kod till det hr istllet, frutsatt att den var
tillrckligt klyftig, eller hur:
Kod:
#include <ctime>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
cout << "  a = " << (int)  40 << "\n";
cout << "  b = " << (int)    0 << "\n";
cout << "  c = " <<  (int) 40 << "\n";
cout << "  d = " << (int)    0 << "\n";
cout << "  e = " << (int)  40 << "\n";
cout << "  f = " << (int)    0 << "\n";
cout << "  g = " << (int) 110728800 << "\n";
cout << "  h = " << (int) 1292506800 << "\n";
cout << "  i = " << (int)  1572480 << "\n";
cout << "  j = " << (int)  1534 << "\n";
cout << "  k = " << (int)   0 << "\n";

cout << "  o = " << (int) 1560 << "\n";
cout << "  p = " << (int) 88920 << "\n";
cout << "  q = " << (int) 23727600 << "\n";
}

(Jag satt dit casting operatorn (int) fr att markera att det r en int som ska presenteras. Flashback saknar ju syntax highlightning med frger s man kan ju tro att man menar ngot annat n en int.)

De olika optimeringsalternativen r inte standardiserade s det gr inte i frvg att rkna ut att en viss kod ska rulla tex 15% snabbare med en viss optimering.
Fr att kunna jmfra s brukar man definiera ngon slags standardkod som krs i en tnkt standardmaskin.
Om man ska jmfra olika optimeringsmetoder och kodningsmetoder s kan det vara bra att kra koden i en virtuell maskin dr man aktivt vljer en viss lgre hastighet, och sedan kr man alla optimeringsswitchar i denna virtuella maskin och jmfr.
Det r ett snrigt omrde. Och ltt att rra till det
Mnga nya kretslsningar och tex grafikort krs i emulerat virtuellt milj i proffsens utvecklingsmiljer fr att ge ungefrliga fingervisningar om den utlovad prestandakningen som kan ligga inom rckhll.

Den lgre hastigheten i den virtuella maskinen jmfrt med vrdmaskinens hastighet r som att kra med bromsen tdragen, men ger jmna och fina men framfrallt jmfrbara vrden. Oberoende av om vrdmaskinen r 50 eller 90% belastad fr tillfllet.

Och anvnds grna fr tidskritiska kodsnuttar tex device drvers, kernel daemons mm.
Lttara att beskriva i diagram och liknande, n i ren text. Lite svrt att lra ut bara s hr.
Hoppas ni frstr principen i alla fall. Lycka Till !!!
Citera
2021-02-02, 09:49
  #31
Medlem
kaks avatar
Citat:
Ursprungligen postat av NegerStryparen
(Jag satt dit casting operatorn (int) fr att markera att det r en int som ska presenteras. Flashback saknar ju syntax highlightning med frger s man kan ju tro att man menar ngot annat n en int.)

Kod:
#include <ctime>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
cout << "  a = " << (int)  40 << "\n";
cout << "  b = " << (int)    << "\n";
cout << "  c = " <<  (int) 40 << "\n";
cout << "  d = " << (int)    << "\n";
cout << "  e = " << (int)  40 << "\n";
cout << "  f = " << (int)    << "\n";
cout << "  g = " << (int) 110728800 << "\n";
cout << "  h = " << (int) 1292506800 << "\n";
cout << "  i = " << (int)  1572480 << "\n";
cout << "  j = " << (int)  1534 << "\n";
cout << "  k = " << (int)   << "\n";

cout << "  o = " << (int) 1560 << "\n";
cout << "  p = " << (int) 88920 << "\n";
cout << "  q = " << (int) 23727600 << "\n";

Citera
2021-02-02, 11:54
  #32
Medlem
Citat:
Ursprungligen postat av kak
Kod:
#include <ctime>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
cout << "  a = " << (int)  40 << "\n";
cout << "  b = " << (int)    << "\n";
cout << "  c = " <<  (int) 40 << "\n";
cout << "  d = " << (int)    << "\n";
cout << "  e = " << (int)  40 << "\n";
cout << "  f = " << (int)    << "\n";
cout << "  g = " << (int) 110728800 << "\n";
cout << "  h = " << (int) 1292506800 << "\n";
cout << "  i = " << (int)  1572480 << "\n";
cout << "  j = " << (int)  1534 << "\n";
cout << "  k = " << (int)   << "\n";

cout << "  o = " << (int) 1560 << "\n";
cout << "  p = " << (int) 88920 << "\n";
cout << "  q = " << (int) 23727600 << "\n";

Haha ! Snyggt !! Tackar tackar
Sicken dum jvel man r Missade alternativet CODE/PHP, det dk inte upp inatt hr nere i morsans kllare. Med mina flaskbottnar till brillor och att gmma datorn under tcket s att morsan inte mrker att jag skriver sdan hr skit p Flashback, p ntterna. S d blir det svrt med redigeringen-

- Tack p mig sjlv

Skulle ju sttt typ
Kod:
cout << "  p = " << (int) 88920 << "\n"

Morsan har hotat med att hon ska hlla lim i tangentbordet, om jag inte gr ivg och kper tv paket Prince, tv psar chips, en sexpack folkl och tv ldor ldvin nu p en gng s, det r bara att lyda nu.....
Castingsoperatorn (int) behvs ju inte men jag lade bara dit den dels fr att lsaren ska frst att det r en int med fast vrde som skrivs ut, frglggningen saknades ju.
Citera
  • 2
  • 3

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in