• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af Looop | 09.03.2011 17:57

Chanllege: Lad os se hvis computer kan regne dette hurtigst

Humor
Hvis computer kan hurtigst regne summen mellem 0 og ((2^64)/2)-1 ??
Post specs og tid for computeren du køre det på.
Jeg stiller det til rådighed i java kode:

public class CalcFunc{

public CalcFunc(){

}

public void calcFromAtoB(long a, long b){
long sum = 0;
while(a <= b){
System.out.println(Long.toString(a));
sum += a;
a++;
}
}
}



public class app{

public static void main(String[] args){

CalcFunc f1 = new CalcFunc();

long x = (long) (Math.pow(2, 64)/2)-1;
f1.calcFromAtoB(0, x);
}
}

AND NO CHEATS - hvis I kan kode det i sprog som ikke først skal igennem en virtuel maskine eller noget andet gør det, men post koden.

Den computer jeg kører på har følgende specs:
600MHz Intel M centrino
OpenSUSE 11.3 32bit
512MB ram (kan ikke lige husk fart osv)

Den gik i gang 17.48.57
og jeg skal nok posted slut tiden men regner ikke med at det bliver i dag ^_^
Så kom så piger og dreng TIME Challenge

  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer21

# 1

14 år 4 måneder siden

Permalink

Indsendt af stig65 den 9. marts 2011 kl. 18:17

Permalink

Fedest - men hvorfor ikke

Fedest - men hvorfor ikke vælge en test vi ikke kan klare "i hånden"?

S= 1 + 2 + 3+......+N
=> S = (N+1)*N/2

N= 2⁶³-1

=> S= 2⁶³ * (2⁶²-½) = 2¹²⁵-2⁶² = 4,2535296E37

  • Log ind eller opret dig for at tilføje kommentarer

# 2

14 år 4 måneder siden

Permalink

Indsendt af marx den 9. marts 2011 kl. 18:27

Permalink

stig65 vinder prisen som den

stig65 vinder prisen som den hurtigste CPU.

Hvem vil have kage?
  • Log ind eller opret dig for at tilføje kommentarer

# 3

14 år 4 måneder siden

Permalink

Indsendt af stig65 den 9. marts 2011 kl. 18:33

Permalink

hmmm, jeg vil hellere have

hmmm, jeg vil hellere have en computer...

Nej, helt alvorligt - var det ikke smartere at sætte folk til at udregne pi med 1000 cifre, beregne de 1000 første primtal eller lignende?
  • Log ind eller opret dig for at tilføje kommentarer

# 4

14 år 4 måneder siden

Permalink

Indsendt af Looop den 9. marts 2011 kl. 18:39

Permalink

Stig du har regne forkert du

Stig du har regne forkert du har regnet med 2^63 ikke i 64
De først prim tal skulle ikke være så svært
MEn det kan vi godt sige i stedet for
  • Log ind eller opret dig for at tilføje kommentarer

# 5

14 år 4 måneder siden

Permalink

Indsendt af mich den 9. marts 2011 kl. 18:51

Permalink

(2⁶⁴)/2 = 2⁶³

(2⁶⁴)/2 = 2⁶³
  • Log ind eller opret dig for at tilføje kommentarer

# 6

14 år 4 måneder siden

Permalink

Indsendt af minimee den 9. marts 2011 kl. 19:14

Permalink

Nu må i lige bestemme jer

Nu må i lige bestemme jer hvad der skal regnes på?? ;)
Hvem skriver først en løsning til brug på Amazon cloud løsning ;)
  • Log ind eller opret dig for at tilføje kommentarer

# 7

14 år 4 måneder siden

Permalink

Indsendt af Looop den 9. marts 2011 kl. 19:23

Permalink

vi går efter den med prime

vi går efter den med prime
  • Log ind eller opret dig for at tilføje kommentarer

# 8

14 år 4 måneder siden

Permalink

Indsendt af stig65 den 9. marts 2011 kl. 19:26

Permalink

Egentligt tror jeg ikke jeg

Egentligt tror jeg ikke jeg gider - den slags lavede vi lidt for meget under min uddannelse.
  • Log ind eller opret dig for at tilføje kommentarer

# 9

14 år 4 måneder siden

Permalink

Indsendt af Looop den 9. marts 2011 kl. 19:31

Permalink

HØHØ
Kan informer om at

HØHØ
Kan informer om at på en
MacBook Pro fall 08
4GB 1067 MHz DDR3 ram
2.8 GHz Intel Core 2 Duo

Kan gøre det på 4sek og svaret er: 501498
Hvis jeg ellers har kodet rigtigt
  • Log ind eller opret dig for at tilføje kommentarer

# 10

14 år 4 måneder siden

Permalink

Indsendt af stig65 den 9. marts 2011 kl. 19:33

In reply to HØHØ
Kan informer om at
by Looop

Permalink

Det lyder lidt i

Det lyder lidt i underkanten....
  • Log ind eller opret dig for at tilføje kommentarer

# 11

14 år 4 måneder siden

Permalink

Indsendt af mich den 9. marts 2011 kl. 19:35

Permalink

Hvad er det nøjagtigt, du

Hvad er det nøjagtigt, du har regnet ud på 4 sekunder?
  • Log ind eller opret dig for at tilføje kommentarer

# 12

14 år 4 måneder siden

Permalink

Indsendt af Looop den 9. marts 2011 kl. 20:11

Permalink

sum af de først 1000 primes

sum af de først 1000 primes
  • Log ind eller opret dig for at tilføje kommentarer

# 13

14 år 4 måneder siden

Permalink

Indsendt af floop den 9. marts 2011 kl. 20:16

Permalink

System.out.println <-- er

System.out.println <-- er der ikke ret voldsom overhead ved at skrive til en terminal konstant?
Oggg nu vi er igang, så har implementationen af java en del at sige + at en virtuel maskine er ungefair 10 gange langsommere end compilet kode, hvorfor er det vi ikke laver et c-program? :P
  • Log ind eller opret dig for at tilføje kommentarer

# 14

14 år 4 måneder siden

Permalink

Indsendt af Kristho den 9. marts 2011 kl. 20:30

Permalink

Python-kode


#! /usr/bin/env python3

def calcFromAtoB(a, b):
sum = 0
while (a <= b):
print(a)
sum += a
a = a + 1

x = ((2**64) / 2) - 1
calcFromAtoB(0, x)


Mit er skrevet i Python 3 og sat i kog her kl. 20:27.

Debian Testing

Jeg kan Ikke lige huske specs på min pc dog. Men en lille fin 12" packard bell - ca, 1½ år gammel.
  • Log ind eller opret dig for at tilføje kommentarer

# 15

14 år 4 måneder siden

Permalink

Indsendt af floop den 9. marts 2011 kl. 20:37

Permalink

Skrevet i c - den burde

Skrevet i c - den burde gøre det du specificere og den burde ikke lave overflow, men giver ingen garantier :P
Skal compiles med gcc eller andet der understøtter long long...

#include
#include
#include

int main(int argc, char *argv[])
{
unsigned long long int a,b,c;
a = 0;
b = (pow(2,64)/2)-1;
c = 0;
while(a <= b){
c += a;
a++;
printf("%lld\n",a);
}
exit(0);
}
  • Log ind eller opret dig for at tilføje kommentarer

# 16

14 år 4 måneder siden

Permalink

Indsendt af divineant den 9. marts 2011 kl. 20:49

Permalink

#9 der er da vist noget

#9 der er da vist noget grueligt galt med din macbook, (eller dine kodeevner) hvis det skal tage 4 sekunder

[brian@Lapdog ~]$ time python 1kprimesum.py
3682913

real 0m0.217s
user 0m0.167s
sys 0m0.007s


og kildekoden er her


#!/usr/bin/env python
import math
def is_prime(number):
if number <= 1: return False
if number == 2: return True
if number % 2 == 0: return False
root = math.ceil(math.sqrt(number))+1
for test in range(2,root):
if number % test == 0: return False
return True

primesum = 0
primes = 0
testme = 0
while primes < 1000:
if is_prime(testme):
primesum += testme
primes += 1
if(testme <= 2): testme += 1
else: testme += 2
print(primesum)
  • Log ind eller opret dig for at tilføje kommentarer

# 17

14 år 4 måneder siden

Permalink

Indsendt af mich den 10. marts 2011 kl. 02:57

Permalink

#14 Tålmodighed er en dyd

Når den er færdig, skal verdenskortene nok tegnes om. :-)

Jeg kørte dit script (Python 2.6.1, Core 2 Duo, 2.26 GHz) med x=2²⁴/2-1 for at blive færdig i dag.
Uden print statementet tog det 3,52 s, og med tog det 142,9 s.
Skaleret til x=2³²/2-1 er det hhv. 901s og 36575s ~ 10 timer. Som det ses, bruges det meste af tiden til at printe.

For sammenligningens skyld prøvede jeg også med Forth (Gforth 0.6.2), hvilket uden print tog 30s til x=2³²/2-1
( -1 1 rshift giver $7FFFFFFF = 2³²/2-1 )
: Test 0. -1 1 rshift 0 DO I s>d D+ LOOP ;

Test cr D.
2305843005992468481


For at køre til 2⁶⁴/2-1 skal man gange tiden med 2³².
Go figure.
  • Log ind eller opret dig for at tilføje kommentarer

# 18

14 år 4 måneder siden

Permalink

Indsendt af Looop den 10. marts 2011 kl. 07:44

Permalink

@16 gik ud fra hvad eclipse

@16 gik ud fra hvad eclipse sagde og har lige kørt det igen:
Start: 7:44:06
Stop: 7:44:10
  • Log ind eller opret dig for at tilføje kommentarer

# 19

14 år 4 måneder siden

Permalink

Indsendt af divineant den 10. marts 2011 kl. 09:00

Permalink

#18, det ændrer ikke på at

#18, det ændrer ikke på at det tager 20x længere tid for dit java program på en c2d@2,8GHz, hhv mit python script kørt på en pentium M @1.6 GHz

Retfærdigvis skal det siges at det tager ~1,5 sek hvis jeg rydder cachen inden scriptet eksekveres, men det viser bare at jeg har en ufattelig langsom harddisk.

EDIT:
Men nu viser #17 jo også hvor meget et print statement koster, så hvis din ikke offentliggjorte prime kode spytter 1000 prints ud, så kan det være at pengene passer.
  • Log ind eller opret dig for at tilføje kommentarer

# 20

14 år 4 måneder siden

Permalink

Indsendt af julemand101 den 10. marts 2011 kl. 09:23

Permalink

Nå så er det min tur til

Nå så er det min tur til at komme med tallene. Jeg valgte dog fra start af at bruge en noget anderledes algortime for at vise at den her test bare er idiotisk eftersom vi ikke alle sammen bruger samme program med samme algoritme i samme programmeringssprog. Men fair nok.

Test foretaget på en 700 Mhz Pentium III med 256 MB ram:
[julemand101@DOLPH ~]$ time java PrimeMain
3682913

real 0m0.344s
user 0m0.263s
sys 0m0.077s


Test foretaget på en Intel Core i5 med 2.80 GHZ med 16 GB ram:
julemand@servi:~$ time java PrimeMain
3682913

real 0m0.064s
user 0m0.040s
sys 0m0.020s


Programmet er skrevet i Java og kører helt sikkert meget hurtigere hvis det blev skrevet i C men nu havde jeg lige koden liggende efter en Euler Opgave. Koden kan ses her:

public class PrimeMain {

public static void main(String[] args) {
int limit = 8000;
int sievebound = (limit - 1) / 2;

boolean[] sieve = new boolean[sievebound];

int crosslimit = ((int)Math.floor(Math.sqrt(limit)) - 1) / 2;

for (int i = 1; i <= crosslimit; i++) {
if (!sieve[i]) {
for (int j = 2*i*(i+1); j < sievebound; j += 2*i+1) {
sieve[j] = true;
}
}
}
int count = 1;
int sum = 2;
for (int i = 1; count < 1000; i++) {
if (!sieve[i]) {
sum += 2*i+1;
count++;
}
}

System.out.println(sum);
}
}

Det eneste besværlige er lige at finde frem til limit variablen. Algoritmen bygger på sieve algoritmen og er derfor således lavet til at finde alle primtal mellem 2 og n. Eftersom opgaven går ud på at finde summen på de første 1000 primtal skal der lige findes frem til en passende limit hvilket kan gøres ved at lave den meget stor og så se hvor stor i er når den har fundet de første 1000 primtal.
  • Log ind eller opret dig for at tilføje kommentarer

# 21

14 år 4 måneder siden

Permalink

Indsendt af Looop den 10. marts 2011 kl. 17:26

Permalink

Okay så den computer som

Okay så den computer som jeg havde til at regne summe af tal i 63 bit er gået ned på grund af det - eller retter andtager det er pga. det ^_^
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
hjælp til dyndns.dk 0
Salg af LinuxPusher.dk 0

Seneste aktivitet

VpN men hvilken 12
Linux i fremgang 25
wifi ikke virker 7
Mest sikker webbrowser 10
32 år med Slackware 7
Ubuntu touch 7
PCLinuxOS 42
Virtuel maskine? 9
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 6
Hvad med en afstemming Malar 5
den er sjov 3
Reserve kernel og btrfs 3
En snak om Linux-kompatibel software 12
"Intet realistisk alternativ" - mig i r*ven 17
Open source events i danmark? 3
Gode anmeldelser Zorin OS 17.3 8
Open Source-eksperimentet 5
Nulstilling af adgangskode 6
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !