[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 老刘1号 于 2019-4-6 21:42 编辑

没错我又来了
1楼除法代码
200000000500002 12121244
我的高精度四则
252272727995700.2526894925268949252689492526894925268949252689492526894925268949252689492526894925268949252689492526894

顺便算了下200000000500002*44444444+12121244
高精度正负浮点数四则运算.EXE * 200000000500002 44444444
8888888822222310888888
高精度正负浮点数四则运算.EXE + 8888888822222310888888 12121244
8888888822222323010132

我的结果再算回去
高精度正负浮点数四则运算.EXE * 252272727995700.25268949252689492526894925268949252689 44444444
11212121132132132121443.99999999999999999999999999999978109916
1

评分人数

TOP

本帖最后由 hongrk 于 2019-4-6 21:04 编辑

回复 9# 老刘1号


    谢谢指出,我已经找到原因了。是补0的问题,算1000000000+1能算出11来……修改完后我会把一楼的代码改好。
那个诡异的情况我根本没法用我所知道的东西解释……

TOP

本帖最后由 老刘1号 于 2019-4-6 19:40 编辑

回复 5# hongrk


    哈哈,批就别比什么效率了吧,没意义。
顺便 你那个函数有bug
call :jia 1000101000100022222222222222222222222222222222222222311 1009993333333333333333333123999999

批:
60ms
1101000100022222223232215555555555555555555346222310

我的汇编版高精度四则:
1000101000100022222223232215555555555555555555346222310


至于你问的那个问题,我只能说批的机制非常奇诡,就不要纠结了

有机会的话,我逆cmd的时候,会分析一下
1

评分人数

TOP

早就脱坑,对我个人而言,没有任何理由再讨论bat。(一句话:我走错片场了

TOP

回复 3# codegay


    只是做一个程序的时候突然想做个尽量完整些的罢了。其他无需数值计算的部分,我倒觉得Bat正好很好用。
不过还是迟早会遇到很难用Bat解决的问题啊。

TOP

回复 4# 523066680


  这句话是说给我听的吗?有些看不明白。
发此贴不是为了寻求加法函数,而是希望能够得到指点。比如:
①一楼的代码是否有什么考虑不周的问题?(不然我无法理解为什么那些经典代码似乎显得很冗长)
②为什么
  1. set c1=%c1:~0,-9%&set c2=%c2:~0,-9%
复制代码
一句,当c1未定义的时候把后面用&隔开的set都吃掉了变成了"~0,-9c2:~0,-9",而c2即使有定义也不会发生改变。

TOP

回复 2# 老刘1号


   谢谢,你所给的那个代码,我阅读过,也测试过(运算同样的内容100遍时间是一楼的4倍,1.2秒)
但发此贴不是为了寻求加法函数,而是为了求指点。比如:
①一楼的代码是否有什么考虑不周的问题?(不然我无法理解为什么那些经典代码似乎显得很冗长)
②为什么
  1. set c1=%c1:~0,-9%&set c2=%c2:~0,-9%
复制代码
一句,当c1未定义的时候把后面用&隔开的set都吃掉了变成了"~0,-9c2:~0,-9",而c2即使有定义也不会发生改变。

TOP

如果是分享那就写分享,
如果是填坑 - 自己选的坑自己填。
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5. typedef unsigned long long int ULL;
  6. const ULL BASE = 1e8;
  7. const ULL LEN = 8;
  8. vector<int> vec_plus(const vector<int>& a, const vector<int>& b);
  9. string vec2str( const vector<int> &vec );
  10. int main(int argc, char *argv[] )
  11. {
  12.     //1000 段 99999999
  13.     vector<int> va(1000, 99999999);
  14.     vector<int> vb(1000, 99999999);
  15.    
  16.     vector <int> vc;
  17.     //1000次加法 耗时测试
  18.     for (int i = 0; i < 1000; i++) vc =vec_plus(va, vb);
  19.     cout << vec2str( vc );
  20.     return 0;
  21. }
  22. vector<int> vec_plus(const vector<int> &a, const vector<int> &b)
  23. {
  24.     static int ia; // iter
  25.     vector<int> c( a.size() );
  26.     int t, pool=0, ib = b.size()-1;
  27.     int v, r;
  28.     for (ia = a.size()-1; ia >= 0; ia-- )
  29.     {
  30.         t = ib >= 0 ? (a[ia]) + (b[ib--]) + pool : (a[ia]) + pool;
  31.         v = t % BASE, pool = t / BASE;
  32.         c[ia] = v;
  33.     }
  34.     if ( pool > 0 ) c.insert(c.begin(), pool);
  35.     return c;
  36. }
  37. string vec2str( const vector<int> &vec )
  38. {
  39.     string s("");
  40.     s += to_string( vec[0] );
  41.     for ( int it = 1; it < vec.size(); it++ )
  42.         s += to_string(vec[it]+BASE).substr(1, LEN);
  43.     return s;
  44. }
复制代码

TOP

噗,我大约是因为复杂bat代码看不懂写不出,才放弃在这程度上使用BAT的。
我基本上都是劝弃BAT改用别的语言实现。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

让我回想起了被高精度四则支配的恐惧……

可以参考:http://www.bathome.net/redirect. ... 3032&pid=195561

TOP

返回列表