Java Math 类的本机代码

2023-11-22

我想知道是否有任何方法可以访问 Math 类的本机代码。更具体地说,我需要查看 sin() 方法的代码。


这取决于实现。如文档中所述java.lang.Math:

与类的一些数字方法不同StrictMath,类的等效函数的所有实现Math未定义为返回逐位相同的结果。这种放松允许在不需要严格再现性的情况下实现更好的性能。

...鼓励代码生成器使用特定于平台的本机库或微处理器指令(如果可用),以提供更高性能的实现Math方法。这种更高性能的实现仍然必须符合规范Math.

对于 Dalvik(Java 的 Android 实现):

dalvik/vm/InlineNative.c

/*
 * public static double sin(double)
 */
static bool javaLangMath_sin(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
    JValue* pResult)
{
    Convert64 convert;
    convert.arg[0] = arg0;
    convert.arg[1] = arg1;
    pResult->d = sin(convert.dd);
    return true;
}

所以它调用libm sin函数,在 Android 上由 bionic libc 提供。看起来像

仿生/libm/src/s_sin.c

double
sin(double x)
{
    double y[2],z=0.0;
    int32_t n, ix;

    /* High word of x. */
    GET_HIGH_WORD(ix,x);

    /* |x| ~< pi/4 */
    ix &= 0x7fffffff;
    if(ix <= 0x3fe921fb) {
        if(ix<0x3e400000)           /* |x| < 2**-27 */
           {if((int)x==0) return x;}    /* generate inexact */
        return __kernel_sin(x,z,0);
    }

    /* sin(Inf or NaN) is NaN */
    else if (ix>=0x7ff00000) return x-x;

    /* argument reduction needed */
    else {
        n = __ieee754_rem_pio2(x,y);
        switch(n&3) {
        case 0: return  __kernel_sin(y[0],y[1],1);
        case 1: return  __kernel_cos(y[0],y[1]);
        case 2: return -__kernel_sin(y[0],y[1],1);
        default:
            return -__kernel_cos(y[0],y[1]);
        }
    }
}

和实施__kernel_sin好像

仿生/libm/src/k_sin.c

static const double
half =  5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
S1  = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */
S2  =  8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */
S3  = -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */
S4  =  2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */
S5  = -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */
S6  =  1.58969099521155010221e-10; /* 0x3DE5D93A, 0x5ACFD57C */

double
__kernel_sin(double x, double y, int iy)
{
    double z,r,v;

    z   =  x*x;
    v   =  z*x;
    r   =  S2+z*(S3+z*(S4+z*(S5+z*S6)));
    if(iy==0) return x+v*(S1+z*r);
    else      return x-((z*(half*y-v*r)-y)-v*S1);
}

__kernel_cos很相似。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Math 类的本机代码 的相关文章

  • Mongo 可审核的 ZonedDateTime 字段在 Spring Boot 2 中不起作用

    在 Spring Boot 项目中 我使用 CreatedDate 之类的注释来保存有关创建 更新相应文档的日期的信息 整个项目都使用 ZonedDateTime 因此带注释的字段也是 ZonedDateTime 为了实现 Mongo 的日
  • 使用 Maven 生成 Eclipse 项目文件

    当我尝试使用生成 Eclipse 项目文件时mvn eclipse eclipse我收到以下错误 插件管理器执行目标时出现内部错误 org apache maven plugins maven eclipse plugin 2 9 SNAP
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 按文件名过滤 eclipse 中的警告

    我们使用 Eclipse 进行 Java 开发 并使用 Maven 将 JSP 编译成 servlet 以便在嵌入式 Jetty 实例中使用 这意味着要从 Eclipse 运行该项目 我必须包含 target jsp source 作为源文
  • 强制 Java 最低版本以“java -version:”运行在 Windows 上不起作用

    我想强制应用程序运行的 JVM 最低版本为 1 6 或更高版本 即 1 6 我的理解是 您可以使用 version 命令行参数来执行此操作 我尝试了一下 在Linux下似乎可以正常工作 但在Windows下却不行 LINUX 我在 Linu
  • spring mvc 跟踪引用页面

    在基于注释的弹簧控制器中 如果用户正在url com first page并点击一个链接或提交一份表格指出url com second page 如何制作second page知道url of first page所以这样second pa
  • 为什么我要使用责任链而不是 switch 语句

    考虑一下您已经获得了多次验证 仅当要检查的对象属于某种类型时 这些验证才应生效 为什么我要使用责任链而不是 switch 语句 责任链示例 public class Executor Inject private ValidatorFact
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • 无法自动装配 org.springframework.mail.javamail.JavaMailSender

    尝试运行我的应用程序时遇到以下问题 所有的东西都调试过了 还是一无所获 IDE 毫无问题地找到了 bean 所以我对这里发生的情况感到非常困惑 SEVERE Exception sending context initialized eve
  • selenium webdriver 中的多个程序执行不起作用

    Selenium WebDriver 中的多个程序执行不起作用 我编写了 1 个 testNG xml 文件和 2 个 java 类 我尝试从 xml 文件运行这两个 java 类 但这不起作用 XML代码
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • “___ 中的方法 ___() 是在无法访问的类或接口中定义的”编译错误

    我发现了一个奇怪的编译限制 我无法解释 并且我不明白这个限制的原因 示例1 考虑这些类 In package e1 public class C1 enum E1 A B C public E1 x In package e2 import
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr
  • 在 REST Web 服务中接受逗号分隔值

    我正在尝试接收 REST URI 中以逗号分隔值形式的字符串列表 示例 http localhost 8080 com vogella jersey first rest todo test 1 abc test 其中 abc 和 test
  • ASTParser:解析绑定后查找声明节点

    我创建了一个启用了绑定的 AST 当我稍后解析绑定时 我得到了一个有效的 ITypeBinding 但是 当我想要获取绑定的声明 Node 时 它 总是返回 null 除非 ITypeBinding 在 sourceFile 中声明 这是我
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml

随机推荐

  • Spark SubQuery 扫描整个分区

    我有一个按 日期 字段分区的配置单元表 我想编写一个查询来从最新 最大 分区获取数据 spark sql select field from table where date of 2019 06 23 explain True vs sp
  • 从字符串 JavaScript 中提取数字

    有谁知道在 JavaScript 中从字符串中提取数字的方法吗 Example 1 banana 1 pineapple 3 oranges 我的目的是将结果保存在数组 JSON 或其他内容中 Result 1 1 3 var result
  • #define TRUE !FALSE 与 #define TRUE 1

    撇开自 c99 年以来的事实不谈stdbool h在定义宏来处理布尔类型时已经存在C以下有什么区别吗 define FALSE 0 define TRUE 1 Option 1 define TRUE FALSE Option 2 从这里的
  • JPA 使用父级合并但创建子级时如何获取生成的 id/对象?

    我有一个先前已被保留并具有 OneToMany与另一个实体的关系 为了添加新实体 我只需在托管对象中添加新实体并使用cascadeType ALL坚持改变 有没有一种方法可以获取新创建的对象的 id 或获取与合并一起使用的原始 非托管 对象
  • Spark SQL无法完成大量分片的Parquet数据写入

    我正在尝试使用 Apache Spark SQL 将 S3 中的 json 日志数据 etl 到 S3 上的 Parquet 文件中 我的代码基本上是 import org apache spark val sqlContext sql S
  • 机器学习奇/偶预测不起作用(50% 成功)

    我对机器学习非常陌生 我尝试创建一个模型来预测数字是否为偶数 我用了这个代码https machinelearningmastery com tutorial first neural network python keras 我根据自己的
  • 计算 MySQL 中每一行的 Z 分数? (简单的)

    我正在寻找一种有效的方法来为 MySQL 表中的每一行分配 Z 分数 也称为标准分数 Z Z Score X Actual value Mean value Standard Deviation I tried SELECT pTime M
  • 如何在 Entity Framework 6 DbContext.Database.BeginTransaction 中配置事务超时?

    使用类似的代码 using var tran Ctxt Database BeginTransaction 如何设置事务超时值 如果出于某种原因您需要自己管理交易 那么使用起来会更容易交易范围 它有几个构造函数接受TimeSpan参数来设置
  • Distinct() 方法是否保持序列的原始顺序不变?

    我想从列表中删除重复项 而不更改列表中唯一元素的顺序 Jon Skeet 和其他人建议使用以下内容 list list Distinct ToList 参考 如何从 List 中删除重复项 从 C 中的 List 中删除重复项 是否保证唯一
  • 使用 scipy curve_fit 通过两个数据点拟合指数函数

    我想拟合一个指数函数y x pw有一个常数pw拟合两个数据点 这scipy curve fit功能应该优化adj1 and adj2 我已尝试使用下面的代码 但无法使其工作 曲线不穿过数据点 我该如何修复它 import numpy as
  • 向后读取文件?

    有没有一种方法可以逐行向后读取文件 而不必从头开始向后读取文件 Use a 内存映射文件并向后走 操作系统将以相反的顺序对文件的所需部分进行分页
  • 使 Django 的 login_required 成为默认值的最佳方法

    我正在开发一个大型 Django 应用程序 其中绝大多数需要登录才能访问 这意味着我们在整个应用程序中都洒满了 login required def view 很好 而且效果很好只要我们记得在各处添加它 可悲的是 有时我们会忘记 而且失败往
  • WCF 服务通过 https 返回 404,但不通过 h​​ttp 返回 404

    我正在将现有服务从 HTTP 开发 UAT 迁移到 HTTPS 生产 但在配置方面遇到了问题 这是我的 web config 的 system serviceModel 部分
  • Java 中的 + 运算符对于数字和字符串的行为有何不同?

    Java没有运算符重载的概念 运算符的行为类似于数字的加法运算符和字符串的连接运算符 这类似于运算符重载行为 那么 Java有运算符重载吗 它基本上是运算符重载 只是内置于语言中 Java 没有运算符重载的概念 是正确的 因为开发商不能重载
  • 时间戳末尾带有 .0

    我正在尝试在 AnnotatedTimeLine Google Chart 及其要求中放入一些时间戳 采用日期时间格式 当我重新格式化 为时间戳格式 从班级收到的字符串时 它会给出以下内容 2013 06 28 10 08 35 0 我想要
  • 通过 sys.modules 使虚拟包可用

    假设我有一个包 mylibrary 我想让 mylibrary config 可供导入 无论是作为动态创建的模块 还是从完全不同的位置导入的模块 然后基本上 安装 在 mylibrary 命名空间内 即 我这样做 import sys ty
  • 给定一个边界框和一条线(两个点),确定该线是否与该框相交

    给定一个边界框 其定义如下bounds min x y z bounds max x y z 以及 3D 空间中的两个点 表示为Vector3对象 如何确定两点所形成的线是否与边界框相交 这里有一个在线 C 实现 线盒交点 http www
  • JavaScript:更改嵌入标签的 src 属性

    我有以下场景 我向用户展示了来自服务器的一些音频文件 用户单击其中一个 然后最终对选定的文件夹和文件执行 onFileSelected 该函数的作用是更改嵌入对象的源 因此 在某种程度上 它是在接受所选文件并保存用户的选择之前对其进行的预览
  • 如何在 VSCode 中创建自定义命令?

    在 Emacs 中 我可以用 Lisp 语言创建函数并将它们放在 emacs文件 这些函数将成为可以从编辑器调用或绑定到按键的命令 就像任何其他内置命令一样 有没有办法在 VSCode 中做到这一点 注意 自定义命令需要能够调用其他命令 简
  • Java Math 类的本机代码

    我想知道是否有任何方法可以访问 Math 类的本机代码 更具体地说 我需要查看 sin 方法的代码 这取决于实现 如文档中所述java lang Math 与类的一些数字方法不同StrictMath 类的等效函数的所有实现Math未定义为返