php,谁能帮我解释下这个代码

问题描述

php,谁能帮我解释下这个代码

PHP_FUNCTION(bcdiv)
{
char *left, *right;
size_t left_len, right_len;
zend_long scale_param = 0;
bc_num first, second, result;
int scale = (int)BCG(bc_precision), argc = ZEND_NUM_ARGS();

if (zend_parse_parameters(argc, "ss|l", &left, &left_len, &right, &right_len, &scale_param) == FAILURE) {
    return;
}

if (argc == 3) {
    scale = (int) ((int)scale_param < 0 ? 0 : scale_param);
}

bc_init_num(&first);
bc_init_num(&second);
bc_init_num(&result);
php_str2num(&first, left);
php_str2num(&second, right);

switch (bc_divide(first, second, &result, scale)) {
    case 0: /* OK */
        if (result->n_scale > scale) {
            result = split_bc_num(result);
            result->n_scale = scale;
        }
        RETVAL_STR(bc_num2str(result));
        break;
    case -1: /* division by zero */
        php_error_docref(NULL, E_WARNING, "Division by zero");
        break;
}

bc_free_num(&first);
bc_free_num(&second);
bc_free_num(&result);
return;

}
/* }}} */

/* {{{ proto string bcmod(string left_operand, string right_operand)
Returns the modulus of the two arbitrary precision operands */
PHP_FUNCTION(bcmod)
{
char *left, *right;
size_t left_len, right_len;
bc_num first, second, result;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &left, &left_len, &right, &right_len) == FAILURE) {
    return;
}

bc_init_num(&first);
bc_init_num(&second);
bc_init_num(&result);
bc_str2num(&first, left, 0);
bc_str2num(&second, right, 0);

switch (bc_modulo(first, second, &result, 0)) {
    case 0:
        RETVAL_STR(bc_num2str(result));
        break;
    case -1:
        php_error_docref(NULL, E_WARNING, "Division by zero");
        break;
}

bc_free_num(&first);
bc_free_num(&second);
bc_free_num(&result);
return;

}

解决方案

这是C++代码,不是php的。应该是用c++写php扩展模块。

解决方案二:

谁能解释下这段代码

时间: 2024-09-15 05:22:05

php,谁能帮我解释下这个代码的相关文章

服务器-谁能帮我解释下 这个代码 然后最好能让里面数据显示到listview中去

问题描述 谁能帮我解释下 这个代码 然后最好能让里面数据显示到listview中去 package com.httppost.main; import java.io.IOException; import java.io.InterruptedIOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.uti

求教大虾,帮我解释下这个正则表达式

问题描述 求教大虾,帮我解释下这个正则表达式 var content = $.trim($('#addContent').val()).replace(/ /g, '<br/>'); 如题,谢谢大虾啦 解决方案 不就是把换行符号替换为html的换行标签<br>而已,因为 除非放在pre标签里面,要不时不会换行的 解决方案二: 就两个函数,一个trim去年左右两边的空格,一个replace把 替换成吗.................................. 解决方案三:

c语言数组定义-哪个大神能帮我解释下这段代码,在线等

问题描述 哪个大神能帮我解释下这段代码,在线等 这个是凯撒密码的代码,哪个大神帮我看哈我的这个里面每句的意思 解决方案 把英文字母变换一下,如D换为AA换为X,B换为Y 解决方案二: 就是获取到输入的字符串,然后对每一位进行判断,如果在区间[dz]或区间[DZ]减3,剩下的加23 解决方案三: 就是获取到输入的字符串,然后对每一位进行判断,如果在区间[dz]或区间[DZ]减3,剩下的加23 解决方案四: 就是获取到输入的字符串,然后对每一位进行判断,如果在区间[dz]或区间[DZ]减3,剩下的加

python文件语句解析-请高手帮我解释下这些语句的意思,跪谢!

问题描述 请高手帮我解释下这些语句的意思,跪谢! import osimport ref_cg=open('dm_cg.txt''w')f_sb=open('dm_sb.txt''w')dir_list=[]for file in os.listdir(): if os.path.splitext(file)[1] == '.txt': dir_list.append(file)dir_list.remove('dm_cg.txt')dir_list.remove('dm_sb.txt')#数据

谁能帮我解释下这段javascript的含义和作用,谢谢!

问题描述 谁能帮我解释下这段javascript的含义和作用,谢谢! var Remember = new Object(); Remember = function(){}; Remember.prototype = { initialize: function(el, options){ this.el = $(el); this.days = 365; this.options = options; this.effect(); var cookie = this.readCookie()

求教大虾帮我解释下这串正则代码

问题描述 求教大虾帮我解释下这串正则代码 RegExp.quote = function (string) { return string.replace(/[-^$*+?.()|[]{}]/g, '$&'); }; 解决方案 1.[ -^$*+?.()|[]{} ],在[]是要匹配的特殊字符的集合: 2.对于String对象的replace方法,表达式不加入g,则只替换第一个匹配,如果加入g,则替换所有匹配: 3.$&;反斜杠应该是转义用的, 4.结合起来应该是把那里面的特殊字符转换成$

c嵌套while循环-谁可以帮我解释下这个循环的嵌套么?最好来几个简单例题

问题描述 谁可以帮我解释下这个循环的嵌套么?最好来几个简单例题 如图所示的这几个版型嵌套,看是看懂了些,就差例题该怎么循环该怎么个顺序,不懂不懂不懂. 解决方案 1.两个while迭代2.两个do while3.两个for4.while.do while5.for.while6.do while.for就是两个迭代嵌套,没啥解释的 解决方案二: 图太不清楚了,建议还是文字吧

java8-谁能帮我解释下这段Java代码

问题描述 谁能帮我解释下这段Java代码 public class CollectionDemo { public static void main(String[] args) { Collection list= new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.iterator().forEachRemaining(lang->System.out.p

grunt-这是Gruntfile.js中的配置代码,求教大神帮我解释下,万分感谢

问题描述 这是Gruntfile.js中的配置代码,求教大神帮我解释下,万分感谢 这是watch插件的配置信息: watch: { options: { dateFormat: function (time) { grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString()); grunt.log.writeln('Waiting for more changes...'); }, li