php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.07.2010, 13:28  
Neuer Benutzer
 
Registriert seit: 13.01.2010
Beiträge: 20
PHP-Kenntnisse:
Fortgeschritten
richardf befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von PhillKill12 Beitrag anzeigen
[...] mit dem man PHP nach c# oder c++, oder was auch immer übersetzten kannst.
hiphop von facebook


sorry für OT, aber: hat damit schon jemand Erfahrung gemacht?


Danke & Gruss
richardf ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.08.2010, 00:29  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

Zitat:
sorry für OT, aber: hat damit schon jemand Erfahrung gemacht?
Nein, aber HipHop wird dieses Problem auch nicht lösen können, bzw. den PHP-Ansatz wesentlich schneller machen, weil der byteweise Zugriff in einer Schleife auch in "hochoptimiertem" Doppeltplus-C nicht besonders schnell ist.

Zitat:
Zitat von hman13 Beitrag anzeigen
Hallo,

um auch mit größeren Zahlen rechnen zu können, habe ich ein paar Funktionen geschrieben:
PHP-Code:
function get($in,$pos){
$out=substr($in, -$pos1);
return 
intval($out);
}


//addieren
function add($a,$b){
$c="";
$u=0;
$max[0]=strlen($a);
$max[1]=strlen($b);
$max=max($max);
for(
$i=1;$i<=$max;$i++){
$d=get($a,$i)+get($b,$i)+$u;
$u=0;
if(
$d>9){$d=$d-10;$u=1;}
$c=$d.$c;
}
if(
$u){$c=$u.$c;}
return 
$c;
}


//multipliziert a mit b, durch b* addieren von a
function mul2($a,$b){
$c="";
for(
$i=1;$i<=$b;$i++){
$c=add($c,$a);
}
return 
$c;
}

//multipliziert a mit b
function mul($a,$b){
$c="";
for(
$i=strlen($b);$i>=1;$i--){
$e="";
for(
$j=0;$j<($i-1);$j++){$e=$e."0";}

$d=mul2($a,get($b,$i)).$e;
$c=add($d,$c);
}
return 
$c;


Diese Funktionen sind leider etwas langsam. Deswegen wollte ich von euch wissen, ob man da etwas optimieren kann.
Anstatt jede Ziffer einzeln zu addieren oder zu subtrahieren, kannst du auch mehrere Stellen gemeinsam berechnen. 32-bittiges PHP kann mit Ganzzahlen im Dezimalbereich bis bis zu plus/minus einer Milliarde umgehen. Mit Floats könntest du sogar bis +/-1_000_000_000_000_000 (== eine Billiarde, nächstkleinere Zehnerpotenz vor 2 hoch 51) rechnen. Überträge sind mit einberechnet, führen also nicht zu einem Zahlenüberlauf.

Bei der Multiplikation wird es schwieriger. Aber auch hier könnte man etwas konstruieren, was wahrscheinlich schneller läuft als dein Ansatz. Der Trick besteht wieder im Zerlegen, diesmal der Faktoren:
(a + b) x (c + d) = ac + ad + bc + bd
Da die Produkte ac, ad usw. wiederum nicht die in PHP maximal mögliche Ganz- oder Real-Zahl überschreiten dürfen, sind hier die Stellenanzahlen begrenzt (stärker als bei der Addition):
Integer (Ganzzahlen): 10_000 (< 65536)
Real (Gleitkommazahlen): 10_000_000 (< 2 hoch 25)

Du könntest dir die Teilbereiche mit substr() ausschneiden, mit intval()|floatval() oder durch explizites Casting mit (int) oder (float) in Ganz- oder Realzahlen umwandeln und mit diesen Werten dann die Teilberechnungen durchführen. Die Ergebnisse der Teilberechnungen (Überträge nicht vergessen) müssen dann wieder in Strings umgewandelt werden, um sie am Ende wieder zusammenkleben zu können.
fireweasel ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
dezimalbereich von float, \php nach c#\ konvertieren, geschwindigkeitsoptimierung c

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum