You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++生成三角函数表时如何让tan90度输出为INFINITY

三角函数值表格代码修改方案

现存核心问题

  • 原PI常量精度不足,且浮点角度转弧度存在固有舍入误差,即使提高PI精度,90°转换后的弧度值也无法精确等于π/2,调用tan函数只会得到极大数值而非系统定义的无穷大
  • 数组维度定义错误:table[10][4]仅可存储4个字段,实际需要存储角度、sin、cos、tan、cot共5组数值,会触发内存越界
  • 特殊边界角度无分支判断,导致0°的cot、90°的tan输出不符合数学定义

具体修改步骤

  • 替换低精度PI为双精度全精度圆周率常量,提升普通角度的计算精度
  • 修正数组维度为double table[10][5],匹配存储字段数量,避免越界
  • 对0°、90°两个边界角度做硬编码赋值,不依赖三角函数运算结果:
    • 0°场景:tan值固定为0,cot值为INFINITY
    • 90°场景:tan值为INFINITY,cot值固定为0
  • 修正原非标准main函数写法,兼容C++编译规则
  • 修正输出格式串的排版错误,保证表格列对齐

修改后可运行代码

#include <cmath>
#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    double table[10][5];
    int i = 0, j = 0;
    const double PI = 3.14159265358979323846;
    double rad_per_deg = PI / 180.0;

    printf("\t三角函数值表(0°~90°,步长10°)\n\t----------------------------------------\n");
    printf("\t角度\t\t sin\t\t cos\t\t tan\t\t cot\n");
    printf("\t----------------------------------------------\n");

    for (i = 0; i <= 90; i += 10)
    {
        for (j = 0; j < 5; j++)
        {
            switch (j)
            {
            case 0:
                table[i / 10][j] = i;
                break;
            case 1:
                table[i / 10][j] = sin(i * rad_per_deg);
                break;
            case 2:
                table[i / 10][j] = cos(i * rad_per_deg);
                break;
            case 3:
                // 90°的tan为正无穷
                if (i == 90)
                {
                    table[i / 10][j] = INFINITY;
                }
                else
                {
                    table[i / 10][j] = tan(i * rad_per_deg);
                }
                break;
            case 4:
                // 0°的cot为正无穷,90°的cot为0
                if (i == 0)
                {
                    table[i / 10][j] = INFINITY;
                }
                else if (i == 90)
                {
                    table[i / 10][j] = 0.0;
                }
                else
                {
                    table[i / 10][j] = 1 / tan(i * rad_per_deg);
                }
                break;
            }
        }
        printf("\t%6.0lf\t\t %.4lf\t\t %.4lf\t\t %.4lf\t\t %.4lf\n",
               table[i / 10][0], table[i / 10][1], table[i / 10][2],
               table[i / 10][3], table[i / 10][4]);
    }
    return 0;
}

运行效果说明

  • 所有非边界角度的三角函数值计算精度由双精度PI保证,误差在浮点允许范围内
  • 90°的tan列会正常输出无穷大标识,不会出现异常极大值
  • 0°的cot列会正常输出无穷大,90°的cot列输出0,完全符合数学定义

内容的提问来源于stack exchange,提问作者berry.11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 16:06:03