[20170622]bc与取模运算.txt

[20170622]bc与取模运算.txt

--//前一阵子在使用bc做取模运算.发现一个奇怪的问题.开始以为是使用mod(受oracle的影响).
--//查手册才发现%.

--//例子如下:
$ bc -v
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.

$ bc -q
9%4
1
9%5
4

--//很明显以上结果是正确的,但是如果加参数-l.
-l, --mathlib =>  Define the standard math library.

$ bc -lq
9%4
0
9%5
0
scale=12
9%5
0
9%4
0
--//很明显这个时候就不对了.

$ bc -lq
12312324%1232
.00000000000000001168

$ bc -q
12312324%1232
948

--//为什么呢?也就是如果使用-l参数,使用standard math library. %不再是取模运算.到底做什么运算呢?
$ man bc
--//里面一段话如下:
expr % expr
   The  result of the expression is the "remainder" and it is com‐
   puted in the following way.  To compute a%b, first a/b is  com‐
   puted to scale digits.  That result is used to compute a-(a/b)*b
   to the scale of the maximum of scale+scale(b) and scale(a).   If
   scale  is  set  to  zero  and both expressions are integers this
   expression is the integer remainder function.

# bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1/3
.33333333333333333333
--//可以看出使用math 库,缺省scale=20.
--//而如果不使用-l参数scale=0.

--//这样如果在scale=20的情况,取模使用是这样.

12312324/1232
9993.76948051948051948051

12312324-9993.76948051948051948051*1232
.00000000000000001168

scale=2
12312324%1232
11.68

12312324/1232
9993.76
--//bc竟然没做四舍五入.

12312324-9993.76*1232
11.68

时间: 2024-10-27 14:19:10

[20170622]bc与取模运算.txt的相关文章

取模运算-求大神解答关于大数幂的运算和去模运算,谢谢!!c语言

问题描述 求大神解答关于大数幂的运算和去模运算,谢谢!!c语言 RT 比如说,2的10000000次方,我用double倒是可以算,但是如何去模呢... 2的10000000次方对1234567取模... 谢谢大神们! 解决方案 我记得以前在蓝桥杯上做过这样的题,你可以使用一个for循环进行计算,然后在每次计算以后就用得数对1234567取模,然后再使用取模后的数继续进行 运算,这样就不会溢出了. 解决方案二: 快速幂取模,对数时间. //求a的b次方对x取余数 int powmod(int a

取模运算--1对256求模的值是多少

问题描述 -1对256求模的值是多少 RT 这个的结果是不是跟机器相关? 或者根据不同的标准有不同的答案? 新手问题,请知道的大神能不吝赐教,谢谢 解决方案 楼下的素质真差 ...没人回答,算了,关闭问题 解决方案二: 是250 250 250 250

解析取模运算% 和位与运算& 之间的关系详解_C 语言

复制代码 代码如下: #include <stdio.h> int main (void){    unsigned int MAX = 32;    unsigned int index = 31;     index = 31;    index = (index + 1) % MAX;  // 这个容易理解    printf ("index = %d\n", index);     index = 31;    index = (index + 1) & (

C++快速幂与大数取模算法示例_C 语言

一.快速幂 其实就是求(a^b)% p ,(其中a,b,p都比较大在int范围内)这类问题. 首先要知道取余的公式: (a*b)%p=(a%p*b%p)%p . 那么幂不就是乘机的累积吗,由此给出代码: int fast(int a,int b,int p) { long long a1=a,t=1; while(b>0) { if(b&1) /如果幂b是奇数多乘一次,因为后边会除2变偶数,(7/2=3) t=(t%p)*(a1%p)%p; a1=(a1%p)*(a1%p)%p; b/=2;

取模和与运算的优化

1 //来自coolshell的一个代码. 1 <span style="color: #000000;">int steps = 64 * 1024 * 1024; 2 // Arbitrary number of steps 3 int lengthMod = arr.Length - 1; 4 for (int i = 0; i < steps; i++) 5 { 6     arr[(i * 16) & lengthMod]++;   // (x &a

JS取模、取商及取整运算方法示例_javascript技巧

本文实例讲述了JS取模.取商及取整运算方法.分享给大家供大家参考,具体如下: JS代码: //求余数 document.write(1%4); document.write(6%4); //求商 console.info(1/4); console.info(6/4); //求商,取整 console.info(parseInt(1/4)); console.info(parseInt(6/4)); console.info('----'); //天花板取整 console.info(Math.

java运算符的优先级和%取模

问题描述 java运算符的优先级和%取模 int a=2 ; int b=a+3*a++ ; b的输出值为什么是8 不是9吗怎么变成8啦 解决方案 ++优先级虽然高,但是第一个a编译器先对它取值了.也许你觉得第一个a应该是a自增1以后的值.但是编译器不这么认为.这种代码在C++中是未定义行为的代码,换言之语法规范没有规定结果是多少,不同的编译器可以产生不同的结果.我不清楚Java中有没有规定,但是可以肯定的是,这种模棱两可的代码绝对不要在你写程序的时候写出来. 解决方案二: 这段代码的正确写法取

javascript中%求余数或取模的例子

js中取余数 0%4 0 1%4 1 2%4 2 3%4 3 4%4 0 5%4 1 例子 //以分钟为基数,获取分钟包含的天.小时.分钟 function getCostTime(minutes){     var day=parseInt(minutes/1440);     var hour=parseInt(minutes/60);     var minute=parseInt(minutes%60);     var string_description=day>0?day+"

NYOJ 102(高次幂取模)

1.二分递归: 使用a*b(mod   n)=(a(mod   n)*b(mod   n))(mod   n)即可.    #include<stdio.h> /* 错误 long long fun(long long a,long long b,long long c) { long long temp; if(0==b) return 1; temp=fun(a,b/2,c); if(b&1) return temp*a%c; return temp; } */ /* AC lon