找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 11650|回复: 0

[其他] 浮点数 化 渐进 分数工具fra.exe

[复制链接]
发表于 2021-5-5 11:33:36 | 显示全部楼层 |阅读模式
本帖最后由 slimay 于 2021-5-5 11:40 编辑
FRA.EXE
摘要:浮点数 化 渐进 分数工具。本工具非常适合用于工程近似计算,密码学,钢琴调音等领域。
版本:1.2
-----------------------------------------------------------------------------
用法:(控制台窗口输入命令)

    fra.exe [待转化的浮点数]

-----------------------------------------------------------------------------
示例:
    fra.exe  "3.1415926535"
    fra.exe  "sqrt(pi)"
    fra.exe  "sin1+cos1"   
    fra.exe  "lg5"
    fra.exe  sqrt(5)/2-0.5

-----------------------------------------------------------------------------
补充:
    可使用的数学函数包括
    常数类
        pi    3.1415926535897932
        e     2.7182818284590452       
    通用类
        round 四舍五入
        int   取整
        ceil  向上舍入
        floor 向下舍入
        abs   绝对值
        sqrt  开方
        lg    常用对数,以10为底
        ln    自然对数
        exp   e的次幂
        torad 度转弧度
        +     加
        -     减
        *     乘
        /     除
        %     取余数
        ^     次方
    三角函数类
        sin、cos、tan   
        arcsin、arccos、arctan
    双曲函数类
        sinh、cosh、tanh
        arcsinh、arccosh、arctanh


源码发行,请自助编译,不提供成品,以节省论坛空间

  1. #include<stdio.h>
  2. #include<math.h>
  3. #include "fra.h"

  4. //逼近次数
  5. #define N 10

  6. //定义帮助信息
  7. #define HELP_INFORMATION "\
  8. Float to fraction tool, Copyright@2021~2023 by Slimay\n\
  9.     usage: fra [Float]\n\
  10.     example: fra lg(pi/2)\n\
  11.     version: 1.2\n"

  12. int main(int argc, char** argv)
  13. {
  14.         //开关检测
  15.         if
  16.         (
  17.                 ( argc == 1 )                       ||
  18.                 ( argc >  2 )                       ||
  19.                 ( stricmp(argv[1], "/?") == 0 )     ||
  20.                 ( stricmp(argv[1], "/h") == 0 )     ||
  21.                 ( stricmp(argv[1], "-h") == 0 )     ||
  22.                 ( stricmp(argv[1], "--h") == 0 )    ||
  23.                 ( stricmp(argv[1], "--help") == 0 )        
  24.         )
  25.         {
  26.                 //抛出帮助信息
  27.                 fputs(HELP_INFORMATION, stdout);
  28.                 exit(1);
  29.         }

  30.         double c = atof(argv[1]);
  31.        
  32.         //存数分子
  33.         double p0 = 0.0f;
  34.         double p1 = 1.0f;
  35.         double p;  
  36.         //存数分母
  37.         double q0 = 1.0f;
  38.         double q1 = 0.0f;
  39.         double q;
  40.        
  41.         double t = c;
  42.         for (int i = 0; i < N; i++)
  43.         {
  44.                 int a = (int) t;
  45.                
  46.                 p = a * p1 + p0;
  47.                 p0 = p1;
  48.                 p1 = p;
  49.                
  50.                 q = a * q1 + q0;
  51.                 q0 = q1;
  52.                 q1 = q;

  53.                 t = 1.0/(t - a);
  54.                
  55.                 //计算误差
  56.                 double re = fabs(p/q/c-1.0);
  57.                 //误差低于30%才显示
  58.                 if(re < 0.1)
  59.                 {       
  60.                         printf
  61.                         (
  62.                                 "%12.0f                                              \n"
  63.                                 " ------------- =%10.8lf ~=%s; Similarity rate [%10.5lf%%]\n"
  64.                                 "%12.0f                                              \n\n"
  65.                                 ,
  66.                                
  67.                                 p,  p/q, argv[1], 100.0 * (1.0-re), q
  68.                         );
  69.                 }
  70.                
  71.                 if(re < 1e-15)
  72.                 {
  73.                         break;       
  74.                 }
  75.         }
  76.        
  77.         return 0;
  78. }
复制代码
例如fra 3.1415926535 就得到了最能接近该超越数的分数比值 约率22 / 7,密率355 / 113, 以及 质精率 833719 / 265381 ~=3.14159265358
fra pi的输出结果
  1.           3
  2. ------------- =3.00000000 ~=pi; Similarity rate [  95.49297%]
  3.           1

  4.          22
  5. ------------- =3.14285714 ~=pi; Similarity rate [  99.95975%]
  6.           7

  7.         333
  8. ------------- =3.14150943 ~=pi; Similarity rate [  99.99735%]
  9.         106

  10.         355
  11. ------------- =3.14159292 ~=pi; Similarity rate [  99.99999%]
  12.         113

  13.      103993
  14. ------------- =3.14159265 ~=pi; Similarity rate [ 100.00000%]
  15.       33102

  16.      104348
  17. ------------- =3.14159265 ~=pi; Similarity rate [ 100.00000%]
  18.       33215

  19.      208341
  20. ------------- =3.14159265 ~=pi; Similarity rate [ 100.00000%]
  21.       66317

  22.      312689
  23. ------------- =3.14159265 ~=pi; Similarity rate [ 100.00000%]
  24.       99532

  25.      833719
  26. ------------- =3.14159265 ~=pi; Similarity rate [ 100.00000%]
  27.      265381
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:45 , Processed in 0.008590 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表