gpt4 book ai didi

php - Simpe Loop 平方整数值在 C 中比在 PHP 中慢

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:23 24 4
gpt4 key购买 nike

昨天我看了一个很好的(短)视频,内容是关于数字“33”的数学问题。链接:https://www.youtube.com/watch?v=wymmCdLdPvM

简而言之:许多数字可以通过以下方式计算:a³ + b³ + c³

例如:29 = 3³ + 1³ + 1³

(需注意:abc可以为负数!)

因此,尽管我尝试了一个简短的暴力破解问题。没什么复杂的,只是想看看我计算这些值的速度有多快。

我构建了 3 个程序(PHP、Pyhton 和 C,让我们在这里专注于 PHP 和 C),这就是我所拥有的...

PHP 程序:

#!/usr/bin/php5
<?php

$total = 0;
$aktstamp = time();

for ($a = -100000000000; $a <= 100000000000; $a++) {
for ($b = -100000000000; $b <= 100000000000; $b++) {
for ($c = -100000000000; $c <= 100000000000; $c++) {
$total++;

if ($a**3+$b**3+$c**3 == 33) {
echo "FOUND IT! a**3+$b**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ((-$a)**3+$b**3+$c**3 == 33) {
echo "FOUND IT! (-a)**3+$b**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ($a**3+(-$b)**3+$c**3 == 33) {
echo "FOUND IT! a**3+(-$b)**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ($a**3+$b**3+(-$c)**3 == 33) {
echo "FOUND IT! a**3+$b**3+(-$c)**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ((-$a)**3+(-$b)**3+$c**3 == 33) {
echo "FOUND IT! (-a)**3+(-$b)**3+$c**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ((-$a)**3+$b**3+(-$c)**3 == 33) {
echo "FOUND IT! (-a)**3+$b**3+(-$c)**3 a: " . $a . " b: " . $b + " c: " . $c;
}
if ($a**3+(-$b)**3+(-$c)**3 == 33) {
echo "FOUND IT! a**3+(-$b)**3+(-$c)**3 a: " . $a . " b: " . $b + " c: " . $c;
}

if ($total % 10000000 == 0) {
$timetaken = time() - $aktstamp;
$calcspersec = 10000000 / $timetaken;

$date = date("d.m.Y", time());
$time = date("H:i:s", time());
echo $date . " " . $time . ": " . $a . "\n";
echo "(Calcs per sec: " . $calcspersec . ")\n";

$aktstamp = time();
}
}
}
}
?>

还有一个 C 程序:

/* 
Compile with:
gcc ./33.c -o 33 -lm -O1
*/

#include <stdio.h>
#include <math.h>
#include <sys/time.h>

long long main(long long argc, char *argv[])
{
long long total = 0, a = 0, b = 0, c = 0;
int timetaken, calcspersec;
int aktstamp = (int)time(NULL);

for (a = -100000000000; a <= 100000000000; a++) {
for (b = -100000000000; b <= 100000000000; b++) {
for (c = -100000000000; c <= 100000000000; c++) {
total++;

if (pow(a, 3)+pow(b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(-a, 3)+pow(b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(-a, 3)+pow(b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(a, 3)+pow(-b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(-b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(a, 3)+pow(b, 3)+pow(-c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(b, 3)+pow(-c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(-a, 3)+pow(-b, 3)+pow(c, 3) == 33) {
printf("FOUND IT! pow(-a, 3)+pow(-b, 3)+pow(c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(-a, 3)+pow(b, 3)+pow(-c, 3) == 33) {
printf("FOUND IT! pow(-a, 3)+pow(b, 3)+pow(-c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}
if (pow(a, 3)+pow(-b, 3)+pow(-c, 3) == 33) {
printf("FOUND IT! pow(a, 3)+pow(-b, 3)+pow(-c, 3) a: %lld b: %lld c: %lld\n", a, b, c);
}

if (total % 10000000 == 0) {
timetaken = (int)time(NULL) - aktstamp;
calcspersec = 10000000 / timetaken;

printf("%lld\n", a);
printf("(Calcs per sec: %u)\n", calcspersec);

aktstamp = time(NULL);
}
}
}
}
}

这是速度:

PHP: (Calcs per sec: 2000000)
Python: (Calcs per sec: 1186440)
C: (Calcs per sec: 833333)

PHP 比 Python 更快对我来说并不奇怪。但到底为什么 C 比 PHP 慢这么多?

即使是 Python 也比 C 快...

我有一个愚蠢的错误,还是 C-pow() 函数比 PHP 慢得多 **

那么,有人能看出 C 的速度只有 PHP 一半的明显原因吗?

最佳答案

可能是因为使用 pow() 函数,您将 long long 转换为 double,然后调用一个函数,然后将生成的 double 转换回 long long,如果你写的是a*a*a,这些都是不必要的。

关于php - Simpe Loop 平方整数值在 C 中比在 PHP 中慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com