3v4l.org

run code in 300+ PHP versions simultaneously
<?php $date = "2016/6"; $rate = "2.90"; $summer = 7; $winter = 1; $bonus = 100000; $count = 180; $amount = 6070000; //料率 計算用 $calc_rate = $rate / 100; # ボーナス回数 $bcount = getBonusCount($date, $count, $summer, $winter); // ボーナス月テーブルの配列取得用 $bonusPattern = getBonusMonthPattern($summer, $winter); //【1】BE33 ボーナス支払残高 // = IF(★ボーナス加算希望額=0, 0, IF(【1-1】="均等", 【1-2】, IF("ボーナス月回数=奇数", 【1-3】, 【1-4】))) $bike_bonus_repay = getBikeBonusRepay($bonus, $bonusPattern, $date, $rate, $summer, $winter, $bcount); echo $bike_bonus_repay . "\r\n"; echo $amount . "\r\n"; $bike_monthly_repay = round(pmt($calc_rate, $count, $amount - $bike_bonus_repay), 0, PHP_ROUND_HALF_DOWN); echo $bike_monthly_repay; function pmt($rate, $count, $amount) { $count = $count; //支払回数 $rate = $rate / 12; //月利(%) $amount = $rate * -$amount * pow((1 + $rate), $count) / (1 - pow((1 + $rate), $count)); // return $amount; } function getBonusMonthPattern($summer, $winter) { return $summer . "-" . $winter; } /** *【1-1】AT21 間隔数利率 計算用値 均等 ot 不均等 * = VLOOKUP(★ボーナス加算月, [ボ月テーブル], 7, FALSE) */ function get1_1($pattern) { $a_table = array( "6-12" => 1, //"均等", "7-1" => 1, //"均等", "8-2" => 0, //"不均等", "7-12" => 0, //"不均等", "8-1" => 0, //"不均等", ); return $a_table[$pattern]; } /** *【1】BE33 ボーナス支払残高 * = IF(★ボーナス加算希望額=0, 0, IF(【1-1】="均等", 【1-2】, IF("ボーナス月回数=奇数", 【1-3】, 【1-4】))) */ function getBikeBonusRepay($bonus, $pattern, $date, $rate, $summer, $winter, $bcount) { $repay = 0; if(0 == $bonus) { return $repay; } if(1 == get1_1($pattern)) { // *【1-2】BE16 ①ボーナス返済間隔均等 // * = +ROUNDUP(★ボーナス加算希望額 / 【1-2-1】, 0) $repay = round($bonus / get1_2_1($date, $rate, $summer, $winter, $bcount), 0); } else { if(0 > $bcount % 2) { //支払回数 奇数 $repay = get1_3($date, $rate, $summer, $winter, $bonus, $bcount); } else { //支払回数 偶数 $repay = get1_4($date, $rate, $summer, $winter, $bonus, $bcount); } } return $repay; } function get1_4($date, $rate, $summer, $winter, $bonus, $bcount) { //【1-3-1-1-1】AQ11 「初回利率」(少数12桁) $b_first_rate = getFirstRate($date, $rate, $summer, $winter); //【1-3-1-1-2】AP4 「月利」(少数12桁) $b_month_rate = getMonthlyRate($rate); //【1-3-1-1-4】AV18 ボーナス月と支払開始月からとりだす計算用の数値 //【1-3-1-1-3】AW18  list($keyNumber1, $keyNumber2) = getKeyNumbers($date, $summer); // *【1-4-1-1】AP18 「賦金率分子」 $b_inst_numerator = (1 + $b_first_rate) * pow((1 + $b_month_rate * $keyNumber2), ($bcount / 2)) * pow((1 + $b_month_rate * $keyNumber1), ($bcount/ 2 - 1)) * ((1 + $b_month_rate * $keyNumber2) * (1 + $b_month_rate * $keyNumber1) - 1); // *【1-4-1-2】AP19 「賦金率分母」 $b_inst_denominator = (1 + (1 + $b_month_rate * $keyNumber2)) * (pow((1 + $b_month_rate * $keyNumber2), ($bcount / 2)) * pow((1 + $b_month_rate * $keyNumber1), ($bcount / 2)) - 1); // *【1-4-1】BE19  // * = +ROUNDDOWN(【1-4-1-1】/【1-4-1-2】, 12) $b_result = round($b_inst_numerator / $b_inst_denominator, 12, PHP_ROUND_HALF_DOWN); //【1-4】BE20 ②ボーナス不均・偶数 // = +ROUNDUP(★ボーナス加算希望額 / 【1-4-1】, 0) return round($bonus / $b_result, 0, PHP_ROUND_HALF_UP); } /** *【1-3-1-1-4】AV18 ボーナス月と支払開始月からとりだす計算用の数値 * = +IF(ボーナス月1 = 8, VLOOKUP(★開始月, "1~12", 2, 0), VLOOKUP(★開始月, "5 or 7", 3, 0)) * $keyNumber1 * *【1-3-1-1-3】AW18  * = +IF(【1-3-1-1-4】 = 5, 7, 5) * $keyNumber2 */ function getKeyNumbers($date, $summer) { $t_date = explode("/", $date); $month = $t_date[1]; if(8 == $summer) { $a_bonusMonthArray = array( 1 => 7, 2 => 7, 3 => 7, 4 => 7, 5 => 7, 6 => 7, 7 => 7, 8 => 5, 9 => 5, 10 => 5, 11 => 5, 12 => 5); } else { $a_bonusMonthArray = array( 1 => 5, 2 => 7, 3 => 7, 4 => 7, 5 => 7, 6 => 7, 7 => 7, 8 => 7, 9 => 5, 10 => 5, 11 => 5, 12 => 5); } $keyNumber1 = $a_bonusMonthArray[$month]; // ??? if(5 == $keyNumber1) { $keyNumber2 = 7; } else { $keyNumber2 = 5; } return array($keyNumber1, $keyNumber2); } /** *【1-3-1-1-2】AP4 「月利」(少数12桁) * = ROUND(★手数料率(年利) / 12, 12) */ function getMonthlyRate($rate) { return round($rate / 12, 12); } function getFirstRate($date, $rate, $summer, $winter) { //【1-2-1-2】AP11 「初回利率」(少数5桁) // = +ROUNDDOWN(★手数料率(年利) * 【1-2-1-2-1】 / 12, 5) // 【1-2-1-2-1】AP10 「初回期間」※支払開始後、最初のボーナス月までのヶ月 $t_date = explode("/", $date); $month = $t_date[1]; $monthCount = 0; while($monthCount < 12) { $monthCount++; $check = $month + $monthCount; if($check > 12) { $check = $check - 12; } if($check == $summer || $check == $winter) { $monthCount++; break; } } return round($rate * $monthCount / 12, 12, PHP_ROUND_HALF_DOWN); } function getBonusCount($date, $count = NULL, $summer = NULL, $winter = NULL) { # 月 $t_date = explode("/", $date); # 支払回数未設定 if (!$count) { return 0; } # ボーナス月未設定 if (!$summer && !$winter) { return 0; } # ボーナス回数 $bcount = 0; if (12 > $count) { $i = $t_date[1]; $j = $i + $count; $k = 0; $l = 0; for ($k = $i; $k < $j; $k ++) { $l = $k > 12 ? $k - 12 : $k; if ($summer == $l) { $bcount ++; } if ($winter == $l) { $bcount ++; } } } else { # 年2回 if ($summer && $winter) { $bcount = $count / 6; } # 年1回 else { $bcount = $count / 12; } } return $bcount; } /** *【1-2-1】data!AP15 「賦金率」 * = +ROUNDDOWN(【1-2-1-1】 * (1 + 【1-2-1-2】) * 【1-2-1-3】 / (【1-2-1-4】 - 1), 12) * */ function get1_2_1($date, $rate, $summer, $winter, $bcount) { //【1-2-1-1】AP7 「ボーナス利率」 // = +ROUNDDOWN(★手数料率(年利) * 6 / 12, 5) $b_rate = round($rate * 6 / 12, 5, PHP_ROUND_HALF_DOWN); //【1-2-1-2】AP11 「初回利率」(少数5桁) $b_first_rate = getFirstRate($date, $rate, $summer, $winter); //【1-2-1-3】AP8 「間隔数利率」 // = ROUNDDOWN((1 + 【1-2-1-1】)^(【1-0-1】-1),12) $b_interval_rate = round(pow((1 + $b_rate), ($bcount - 1)), 12, PHP_ROUND_HALF_DOWN); //【1-2-1-4】AP9 「回数利率」 // = ROUNDDOWN((1 + 【1-2-1-1】)^(【1-0-1】),12) $b_count_rate = round(pow(1 + $b_rate, $bcount), 12, PHP_ROUND_HALF_DOWN); //= +ROUNDDOWN(【1-2-1-1】 * (1 + 【1-2-1-2】) * 【1-2-1-3】 / (【1-2-1-4】 - 1), 12) $b_inst_rate = round($b_rate * (1 + $b_first_rate) * $b_interval_rate / ($b_count_rate - 1), 12, PHP_ROUND_HALF_DOWN); return $b_inst_rate; }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0130.00616.88
8.3.50.0140.00716.72
8.3.40.0150.00419.29
8.3.30.0060.01219.25
8.3.20.0040.00419.25
8.3.10.0000.00722.15
8.3.00.0040.00422.24
8.2.180.0100.00716.75
8.2.170.0180.00422.96
8.2.160.0040.01122.33
8.2.150.0080.00024.18
8.2.140.0080.00024.66
8.2.130.0040.00420.27
8.2.120.0090.00026.35
8.2.110.0060.00322.39
8.2.100.0000.01118.41
8.2.90.0000.00918.13
8.2.80.0030.00618.13
8.2.70.0050.00318.30
8.2.60.0000.00818.59
8.2.50.0030.00618.10
8.2.40.0080.00320.92
8.2.30.0080.00021.36
8.2.20.0050.00318.39
8.2.10.0080.00018.38
8.2.00.0000.00818.05
8.1.280.0090.00925.92
8.1.270.0030.00624.27
8.1.260.0040.00428.09
8.1.250.0080.00028.09
8.1.240.0030.00621.19
8.1.230.0090.00318.14
8.1.220.0080.00018.26
8.1.210.0040.00418.77
8.1.200.0040.00417.72
8.1.190.0030.00717.72
8.1.180.0000.00818.10
8.1.170.0000.00822.05
8.1.160.0040.00422.44
8.1.150.0000.00820.64
8.1.140.0000.00819.94
8.1.130.0000.00818.00
8.1.120.0000.00717.88
8.1.110.0050.00317.71
8.1.100.0000.00917.78
8.1.90.0040.00417.68
8.1.80.0050.00317.82
8.1.70.0040.00417.73
8.1.60.0080.00017.89
8.1.50.0080.00017.88
8.1.40.0040.00417.70
8.1.30.0090.00017.91
8.1.20.0000.00817.93
8.1.10.0030.00517.91
8.1.00.0030.00517.76
8.0.300.0030.00518.77
8.0.290.0040.00417.13
8.0.280.0040.00418.62
8.0.270.0000.00717.65
8.0.260.0030.00317.46
8.0.250.0030.00517.43
8.0.240.0000.00817.25
8.0.230.0040.00417.36
8.0.220.0070.00017.17
8.0.210.0030.00517.28
8.0.200.0070.00617.34
8.0.190.0000.00717.29
8.0.180.0000.00717.33
8.0.170.0000.00917.24
8.0.160.0050.00217.30
8.0.150.0060.00617.20
8.0.140.0000.00717.26
8.0.130.0030.00313.80
8.0.120.0040.00417.32
8.0.110.0000.00717.33
8.0.100.0000.00817.33
8.0.90.0000.00817.26
8.0.80.0100.00617.26
8.0.70.0050.00317.16
8.0.60.0000.00817.14
8.0.50.0050.00317.34
8.0.30.0090.01217.44
8.0.20.0090.01317.49
8.0.10.0060.00317.45
8.0.00.0060.01217.18
7.4.330.0030.00315.55
7.4.320.0000.00716.82
7.4.300.0030.00316.82
7.4.290.0000.00716.84
7.4.280.0060.00516.80
7.4.270.0000.00716.90
7.4.260.0040.00416.79
7.4.250.0000.00716.70
7.4.240.0040.00416.73
7.4.230.0000.00716.98
7.4.220.0060.01216.86
7.4.210.0060.01116.88
7.4.200.0040.00316.97
7.4.160.0110.00416.79
7.4.150.0130.00917.40
7.4.140.0080.01117.86
7.4.130.0090.01016.76
7.4.120.0110.00816.70
7.4.110.0140.01116.97
7.4.100.0110.00616.89
7.4.90.0080.01416.64
7.4.80.0070.01019.39
7.4.70.0050.01416.72
7.4.60.0100.00716.79
7.4.50.0090.00616.77
7.4.40.0060.01316.88
7.4.30.0100.00616.80
7.4.00.0100.00715.38
7.3.330.0040.00413.68
7.3.320.0000.00613.56
7.3.310.0000.00716.72
7.3.300.0030.00316.57
7.3.290.0050.01216.63
7.3.280.0110.00816.66
7.3.270.0090.00817.40
7.3.260.0140.00616.68
7.3.250.0110.00716.70
7.3.240.0070.01116.82
7.3.230.0170.00016.77
7.3.210.0130.00416.85
7.3.200.0110.00616.68
7.3.190.0120.00916.92
7.3.180.0080.00816.62
7.3.170.0140.00716.68
7.3.160.0120.00616.75
7.2.330.0120.00617.11
7.2.320.0150.00317.01
7.2.310.0060.01117.18
7.2.300.0060.01216.99
7.2.290.0090.00917.15
7.2.60.0040.00817.11
7.2.50.0080.00317.13
7.2.00.0070.00719.62
7.1.200.0030.00715.63
7.1.70.0070.00017.11
7.1.60.0060.00617.15
7.1.00.0070.06322.66
7.0.200.0200.00314.80
7.0.120.0000.08722.36
7.0.110.0070.08722.26
7.0.100.0130.07022.27
7.0.90.0100.08022.18
7.0.80.0030.06722.18
7.0.70.0230.06722.31
7.0.60.0100.07722.16
7.0.50.0100.08022.34
7.0.40.0070.07022.42
7.0.30.0070.05722.13
7.0.20.0100.06322.29
7.0.10.0100.06022.18
7.0.00.0130.05322.22
5.6.270.0230.06321.33
5.6.260.0100.06321.32
5.6.250.0100.06721.30
5.6.240.0030.08321.02
5.6.230.0130.07321.27
5.6.220.0070.07321.25
5.6.210.0030.08321.23
5.6.200.0100.07721.23
5.6.190.0100.05721.00
5.6.180.0100.06021.34
5.6.170.0170.06721.13
5.6.160.0130.05721.02
5.6.150.0130.06020.94
5.6.140.0030.07021.05
5.6.130.0000.06321.29
5.6.120.0030.06321.18
5.6.110.0170.07021.21
5.6.100.0100.06721.27
5.6.90.0170.06021.32
5.6.80.0130.04720.43
5.6.70.0130.05720.46
5.6.60.0000.08020.63
5.6.50.0200.06020.61
5.6.40.0100.05020.67
5.6.30.0130.05320.49
5.6.20.0170.05720.38
5.6.10.0100.06320.37
5.6.00.0070.05320.47

preferences:
65.93 ms | 401 KiB | 5 Q