Miért hibázik a prímszámkereső programom?
Ez egy program ami egy beírt intervallumon belül kiírja az összes prímszámot .A hiba az az , hogy totál véletlenszerűen nem ír ki bizonyos prímeket . Van úgy mindet megtalálja ,van úgy egyet kihagy másikban az van meg és megint egy másik hiányzik .
A program amúgy nagyon gyors (a maga módján) 2000000-ig 15 másodperc alatt kiszámolja a prímeket .
Hallottam ilyenről ,hogy a natív kódú (ami közvetlenül a processzoron fut) programok ejthetnek számítási hibákat.
A forráskód hibátlan , randomizálás nincs benne szóval a hibát erre tudnám visszavezetni .
Ha valaki tudná mi a gond vagy ötlete is van a megoldásra kérem írja le .
Hibás az algoritmus.
A processzor által ejtett számítási hibák ennél sok milliószor ritkábbak.
"A forráskód hibátlan"
Ez azért veszélyes kijelentés. Be tudnád esetleg másolni ezt a kódrészletet?
+1 a hibás kódra
+1 az nagyon lassú
"Hallottam ilyenről ,hogy a natív kódú (ami közvetlenül a processzoron fut) programok"
Na most ezt hogy is? Például a java programod nem natív, de a jvm, amin fut az már nagy valószínűséggel igen. Az meg akkor ejthet hibákat -> tehát a programod is.. ?
Erősen kétlem kedves 11:21 ,hogy "összedobtál" egy olyan programot ami 0,3s alatt teljesíti a feladatot .Kérlek írd le miben írtad azt a pársoros kódot és ,hogy milyen gépen futtattad .
elég kusza ez főleg azért van mert próbáltam mérsékelni a számításokat úgy ,hogy a program nem számolja ki ,hogy osztható-e öttel ,hanem ötösével lépked felfele a páratlan számok listáján:
#include <stdio.h>
int main()
{
long oszto,i,beolvasas,legnagyobb,gyok,korigalooszto,korigalogyok;
int otszamlalo,prim;
while (4<5)
{
printf("\n####################################");
printf("\n\nlarger than:");
scanf("%d",&beolvasas);
printf("smaller than:");
scanf("%d",&legnagyobb);
if (beolvasas <2 )
{
beolvasas = 2;
}
//Ez a rész egy bugot korigal ami egy optimalizacióból ered
//A beírt legkissebbet 5-tel végződőre számolja fel és addig
//megállapítja , hogy az prím-e . Azért teszi ezt mert az "otszamlalo"
//kihajdja az ottel vegződőkek mivel azok öttel oszthatók
while ((beolvasas%5!=0 )||(beolvasas%10==0 ))
{
prim =0;
korigalogyok=beolvasas/2+1;
for (korigalooszto=2;korigalooszto<korigalogyok;korigalooszto+=1)
{
if (beolvasas%korigalooszto==0)
{
prim = 1;
korigalooszto = korigalogyok;
}
}
if (prim == 0)
{
printf("%d\n",beolvasas);
}
beolvasas+=1;//itt számolja fel
}
if (beolvasas == 5)
{
printf("5\n");
}
//Itt fejeződik be a 5 re való redukálás
for (i=beolvasas;i<legnagyobb;i+=2)
{
otszamlalo +=1;
if (otszamlalo < 5)
{
prim = 0;
gyok=sqrt(i)+1;
for (oszto=3;oszto<gyok;oszto+=2)
{
if (i%oszto==0)
{
prim = 1;
oszto = gyok;
}
}
if (prim == 0)
{printf("%d\n",i);}
}
else
{otszamlalo=0;}
}
}
return 0;
}
Nekem az utolsó hibátlan kód amit írtam, az ezt volt:
<?php print('Hello World!'); ?>
:)
"while (4<5)"
Nem is olvastam tovább.
A kódod hibás, hidd el.
Hozzá nem nyúlok ehhez.
Töröld ki az egészet és nézz utána legalább wikipedián hogy kell prímeket keresni.
Adott N-ig prím keresésre Eratoszthenész szitája a klasszikus módszer.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!