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

在OpenSCAD中如何检测函数返回的inf值?

OpenSCAD中检测inf值的方法

问题背景

我拥有丰富的软件开发经验,但接触OpenSCAD的时间较短。我编写了如下函数:

function GetSlope(angle)=sin(angle)/cos(angle);

当角度为90°或270°时,由于cos值为0导致除以0,该函数会返回inf。我需要在使用此函数时检测该值,但OpenSCAD中未找到is_inf函数或inf常量,请问是否存在检测inf值的方法,还是必须在函数外部手动检测?

解决方案

OpenSCAD确实没有内置的is_inf函数或inf常量,不过有两种更可靠的处理方式:

  1. 提前在函数内规避除以0的情况
    由于浮点数计算存在精度误差,不要直接判断cos(angle) == 0,而是判断其绝对值是否小于一个极小阈值(比如1e-6),此时直接返回一个可检测的标记值(比如undef):

    function GetSlope(angle) = abs(cos(angle)) < 1e-6 ? undef : sin(angle)/cos(angle);
    

    后续使用时,通过内置的is_undef()函数判断即可:

    slope = GetSlope(90);
    if (is_undef(slope)) {
      // 处理垂直角度的逻辑
    } else {
      // 使用正常斜率值
    }
    
  2. 事后检测inf值
    如果必须保留原函数逻辑,可利用inf的数值特性——它会远大于常规计算中的合理数值,通过判断值是否超出某个极大阈值来识别:

    slope = GetSlope(90);
    if (abs(slope) > 1e20) {
      // 判定为inf,处理垂直情况
    }
    

    这种方式不如第一种可靠,因为极端情况下可能有合法数值接近该阈值,但在常规场景下可以使用。

内容的提问来源于stack exchange,提问作者Nathan Sokalski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:45:09