mboost-dp1

Google

Gangnam Style tvang YouTube til opgradering

- Via fuse - , redigeret af Net_Srak

Den meget kendte video fra den Koreanske singer-songwriter PSY ‘Gangnam Style’, er i skrivende stund blevet set 2.151.996.536 gange på YouTube. YouTube har på grund af de mange visninger været nødsaget til at opgradere deres kode for at kunne håndtere det store tal, da det ikke længere passer ind i en 32-bit integer (Max værdi: 2.147.483.647).

http://www.fuse.tv/2014/12/psy-gangnam-style-youtube-views skrev:

Gangnam Style’ has been viewed so many times we have to upgrade!

Hover over the counter in PSY’s video to see a little math magic and stay tuned for bigger and bigger numbers on YouTube.





Gå til bund
Gravatar #1 - Montago.NET
3. dec. 2014 13:54
hehe... tallet ligner NemID's textur

btw.. de kunne have skiftet til Unsigned INT i stedet... så kunne den ses 2 milliarder gange mere før det ville være et problem.
Gravatar #2 - Target
3. dec. 2014 13:59
"Opgradere deres kode"... Taler vi ikke bare om ændring af en datatype? Det er vist den tyndeste opgradering nogensinde. :-)
Bevares, det kan da ses som en opgradering, men alligevel...
Gravatar #3 - Montago.NET
3. dec. 2014 13:59
Target (2) skrev:
"Opgradere deres kode"... Taler vi ikke bare om ændring af en datatype? Det er vist den tyndeste opgradering nogensinde. :-)
Bevares, det kan da ses som en opgradering, men alligevel...


aka. refactor
Gravatar #4 - tentakkelmonster
3. dec. 2014 15:23
Det her kan vi takke de mange C og C++ agtige sprog for: At folk så tit glemmer at skrive "unsigned" foran, som #1 påpeger, og derudover så er der alle de andre gange, hvor man gør det, og ender med en hel masse besværlig typecast snadder, så man ender med at sige "skidt pyt, så mange kommer der nok ikke alligevel" og går tilbage til en unsigned.
Gravatar #5 - milandt
3. dec. 2014 16:08
Signed / unsigned.. hvis en tæller kunne finde på at ramme 2 milliarder, så kunne den nok sagtens ramme 4 milliarder også, og så havde det nok været et bedre valg at bruge en 64 bits interger datatype alligevel
Gravatar #6 - tachylatus
3. dec. 2014 17:45
Ud fra illustrationen ved mouse-over kunne man godt få indtryk af, at de bare har tilføjet en funktion i interfacet til at oversætte negative view counts. Man kunne forestille sig at det ville være omstændigt at ændre typen i de bagvedliggende databaser, så det ville da være morsomt hvis den nåede 4 milliarder og ramte ind i samme problem igen :-)
Gravatar #7 - gramps
3. dec. 2014 19:00
#4
Nej, det kan vi takke dovne programmører for. I C bruger jeg konsekvent uintXX_t eller intXX_t fra stdint.h, netop for at have fuld kontrol over hvor stort tal jeg har til rådighed.

I øvrigt har f.eks. Java ikke unsigned ints, så du skal hellere skyde skylden derover end på C/C++.
Gravatar #8 - Wiljan
3. dec. 2014 19:15
Sæt 2 tæller efter hinanden som med timer + minutter så er der langt til overflow :-)
Gravatar #9 - Slettet Bruger [22525864]
3. dec. 2014 19:50
gramps (7) skrev:
#4
Nej, det kan vi takke dovne programmører for. I C bruger jeg konsekvent uintXX_t eller intXX_t fra stdint.h, netop for at have fuld kontrol over hvor stort tal jeg har til rådighed.

I øvrigt har f.eks. Java ikke unsigned ints, så du skal hellere skyde skylden derover end på C/C++.


Interessant, det havde jeg faktisk ikke opdaget med Java, selvom jeg nu har skrevet en del Java. Jeg antog bare da C# har uint, så havde Java også.
Gravatar #10 - Claus Jørgensen
3. dec. 2014 19:53
Err, en 32-bit integer går op til 4294967295 når den er unsigned... Men ok, det er nok lidt svært at forklare til en journalist.

milandt (5) skrev:
Signed / unsigned.. hvis en tæller kunne finde på at ramme 2 milliarder, så kunne den nok sagtens ramme 4 milliarder også, og så havde det nok været et bedre valg at bruge en 64 bits integer datatype alligevel
Eller bare en database type uden begrænsning på nummerstørrelse (BigInt, et. al.)
Gravatar #11 - gramps
3. dec. 2014 20:02
Claus Jørgensen (10) skrev:
Err, en 32-bit integer går op til 4294967295 når den er unsigned... Men ok, det er nok lidt svært at forklare til en journalist.



Lad da være med at skyde skylden på journalister. YouTube skriver direkte at de var nødt til at opgradere fordi Gangnam Style kom over den værdi som en int32 kan holde.
Gravatar #12 - Claus Jørgensen
3. dec. 2014 20:25
#11

https://plus.google.com/+youtube/posts/BUXfdWqu86Q

Det er jo ikke en teknisk forklaring, bare en typisk udmelding fra PR afdelingen.
Gravatar #13 - nyhjem2
3. dec. 2014 20:26
Bare lige for at slynge det ud.. :)
Google bruger IKKE unsigned int.. fordi det kan give fejl man ellers ikke havde regnet med..
Det står her i deres codeing guidelines :)

http://google-styleguide.googlecode.com/svn/trunk/...
Gravatar #14 - gramps
3. dec. 2014 20:32
#12
Eftersom det er en post til den generelle befolkning og ikke til programmører, så er det holdt så simpelt som muligt. Det er jo tydeligt at de snakker om unsigned int. De fleste programmører kan vel genkende 2³¹-1 når det ser det.
Gravatar #15 - Clauzii
4. dec. 2014 00:46
nyhjem2 (13) skrev:
Google bruger IKKE unsigned int.. fordi det kan give fejl man ellers ikke havde regnet med..


Det gjorde det så alligevel :)
Gravatar #16 - tentakkelmonster
4. dec. 2014 08:21
Tak til #13 for det link, for som Google skriver "do not use unsigned types to say a number will never be negative."
At det er nødvendigt med sådan en uintuitiv regel, er endnu et godt eksempel på, hvorfor jeg mener at C og C++ syntaxen har et lille problem.
Gravatar #17 - gramps
4. dec. 2014 08:58
tentakkelmonster (16) skrev:
Tak til #13 for det link, for som Google skriver "do not use unsigned types to say a number will never be negative."
At det er nødvendigt med sådan en uintuitiv regel, er endnu et godt eksempel på, hvorfor jeg mener at C og C++ syntaxen har et lille problem.


Det er vel mere et problem med den måde syntaxen så bruges på? Så vidt jeg kan læse, så er det ikke en kritik af selve uint, men af anvendelsen. Man skal ikke udlede en egenskab af den unsignede int, udover at den kan holde et tal.

Det er ikke anderledes end når man anbefaler, at man ikke bruger if(boolean), men specificerer if(boolean == true/false).
Gravatar #18 - FlushNorris
4. dec. 2014 09:13
Claus Jørgensen (10) skrev:

Eller bare en database type uden begrænsning på nummerstørrelse (BigInt, et. al.)


Uden begrænsning ligefrem? :)
Gravatar #19 - Saxov
4. dec. 2014 10:34
FlushNorris (18) skrev:
Uden begrænsning ligefrem? :)
Blob...
Gravatar #20 - FlushNorris
4. dec. 2014 12:49
Saxov (19) skrev:
Blob...


Jo jo, nu var det BigInt jeg hentydede til... Blob-datatyper er trods alt ikke den bedste type til at indholde integers, især ikke hvis de skal indexeres ;)
Gravatar #21 - OleH
9. dec. 2014 04:06
Det er sjovt de har engang haft sat den til et bestemt tal, som grænse.
Gravatar #22 - gramps
9. dec. 2014 09:47
#21
Tallet er gemt på en computer. Den måde tal gemmes på på en en computer er i binært format, f.eks. er tallet 98 gemt som 0b00000000000000000000000001100010 på en almindelig 32-bit computer. Hvert 0 og 1 kaldes en bit, og jeg har skrevet 0b foran for at vise at der er tale om et binært tal. På en computer ligger tallene i en lille celle, på rad og række, klar til at blive brugt af en CPU.

Rent teknisk, så kan en tal gemmes som negativt ved at benytte den første bit til at indikere fortegn. 1 indikerer negativt tal, 0 indikerer positivt. Altså vil -98 og 98, i 8-bit format, være:

0b11100010 -> -98
0b01100010 -> 98

Det er så op til programmøren at huske på om han arbejder med eller uden fortegn (men den opgave er i dag, i meget høj grad, lagt over til programmeringsværktøjer).

Det binære talsystem har en meget smart egenskab, nemlig at man kan beregne den størst mulige værdi ved at opløfte 2 i antal bit og subtrahere med 1, 2^n - 1, hvor n = antal bit. Ved fortegnsbit subtraherer man endvidere 1 fra antal bits, 2^(n-1)-1.

Google, eller måske dem, der oprindeligt udviklede YouTube før Google købte det, valgte at bruge et 32 bit fortegnsafhængigt talformat. Vi bruger derfor den sidste formel til at beregne det største tal YouTube-visninger kunne have:

2^(32-1) - 1 = 2^31 - 1 = 2.147.483.648 - 1 = 2.147.483.647

Grænsen har altså været en praktisk, fysisk begrænsning. Der har ganske simpelt ikke været plads til større tal; 0b01111111111111111111111111111111 er det absolut højeste tal der kan gemmes i et 32 bit fortegnsafhængigt tal.

Programmørerne inde ved YouTube har så ændret tallet fra at være 32 bit til at være 64 bit. Så nu har de 2^63 - 1 som højeste værdi, dvs. 9.223.372.036.854.775.807, eller 0b0111111111111111111111111111111111111111111111111111111111111111.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login