mysql原始碼:
void item_func_div::result_precision()
void item_func_div::fix_length_and_dec()
break;
} case int_result:
hybrid_type= decimal_result;
dbug_print(「info」, (「type changed: decimal_result」));
result_precision();
break;
case decimal_result:
result_precision();
break;
default:
dbug_assert(0);
} maybe_null= 1; // devision by zero
dbug_void_return;
}通過分析以上**,發現mysql的除法操作結果又三種型別,real_result、 int_result 、decimal_result
prec_increment= current_thd->variables.div_precincrement;
結果的精度precision:
uint precision= min(args[0]->decimal_precision() +
args[1]->decimals + prec_increment,
decimal_max_precision);
結果精度scale:
decimals= min(args[0]->decimals + prec_increment, decimal_max_scale);
猜測:prec_increment 是為了處理類似字串這種型別的操作設定的。
python實現無限精度除法運算
原創 2013年11月23日 17 38 11 python3的int支援超大數的乘法運算,但是除法運算貌似還沒有實現無限精度。對於浮點數乘法可以擴大轉換為整數,運算完畢以後再縮小儲存為str,即可實現高精度,但是對於除法,這種方法貌似行不通。通過思考手算除法的過程,以a b c餘r為例,過程如下 ...
高精度除法 大數除法
問題描述 給出兩個正整數,計算a b的值,保證a和b的位數不超過500位。輸入描述 輸入兩個用空格隔開的正整數。輸出描述 輸出a b的值。樣例輸入 500 2 樣例輸出 250 解題思路 大數除法的實現有兩種方式 1 用a b,迴圈,直到a 計算過程 擴充套件b的位數 a.length b.lent...
高精度除法
演算法思想 反覆做減法,看看從被除數裡最多能減去多少個除數,商就是多少 所以演算法核心是寫乙個大整數的減法函式 反覆呼叫該函式進行減法操作 演算法步驟 用陣列a表示被除數,陣列b表示除數,陣列res表示商 先用被除數a減去除數b得到差的位數k,同時商 1 再用被除數a減去若干個除數b 10 k 不夠...