You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取大整数平方根的小数部分?PHP GMP相关技术问题

获取大整数平方根的小数部分(PHP GMP实现)

gmp_sqrt() 仅返回平方根的整数部分,要获取小数部分,你可以用逐位迭代的方式计算,下面是一个可指定精度的实现示例:

代码实现

<?php
$y2 = gmp_init('28626386478758000000000000909090904');
$integer_part = gmp_sqrt($y2);

// 计算原数与整数部分平方的差值(余数)
$remainder = gmp_sub($y2, gmp_pow($integer_part, 2));

// 设置要保留的小数位数
$decimal_places = 10;
$decimal_part = '';

$current_remainder = $remainder;
for ($i = 0; $i < $decimal_places; $i++) {
    // 余数乘100,为下一位小数计算做准备
    $current_remainder = gmp_mul($current_remainder, 100);
    // 找到最大的d,满足 (2*整数部分*10 + d)*d ≤ 当前余数
    $d = 0;
    $two_times_int = gmp_mul($integer_part, 20);
    while (gmp_cmp(gmp_add(gmp_mul($two_times_int, $d), gmp_pow($d, 2)), $current_remainder) <= 0) {
        $d++;
    }
    $d--;
    // 记录当前小数位
    $decimal_part .= strval($d);
    // 更新余数
    $current_remainder = gmp_sub($current_remainder, gmp_add(gmp_mul($two_times_int, $d), gmp_pow($d, 2)));
}

// 输出完整结果
echo "Square root is: " . gmp_strval($integer_part) . "." . $decimal_part . "\n";
?>

逻辑说明

  1. 先用gmp_sqrt得到平方根的整数部分,再计算原数与整数部分平方的余数,这是小数部分计算的核心依据。
  2. 循环逐位生成小数:每次将余数乘100,然后找到符合条件的数字d,作为当前小数位;之后更新余数,继续下一位的计算。
  3. 你可以通过修改$decimal_places的值来调整小数部分的精度。

内容的提问来源于stack exchange,提问作者Asif Iqbal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:35:03