当前位置: 首页 > 面试题库 >

Java的快速超越/三角函数

桂玉石
2023-03-14
问题内容

由于java.lang.Math中的三角函数非常慢:是否有一个可以快速且良好地近似的库?似乎可以更快地进行几次计算而不会损失很多精度。(在我的机器上,乘法需要1.5ns,而java.lang.Math.sin为46ns至116ns)。不幸的是,还没有一种使用硬件功能的方法。

更新:功能应该足够准确,例如,用于GPS计算。这意味着您至少需要7个十进制数字的精度,这排除了简单的查找表。而且它应该比基本x86系统上的java.lang.Math.sin快得多。否则就没有意义了。

对于pi / 4以上的值,除了硬件功能外,Java
还会执行一些昂贵的计算。这样做是有充分的理由的,但是有时您更关心速度而不是最后一位的准确性。


问题答案:

哈特的计算机近似。用一列Chebyshev经济化的近似公式表示一堆函数的精度。

编辑:将
我的副本下架,结果却是另一本书,听起来很相似。这是使用其表的sin函数。(在C中进行了测试,因为这对我来说比较方便。)我不知道这样做是否会比Java内置程序快,但是至少可以保证它的准确性不高。:)您可能需要先对参数进行范围缩小;

#include <math.h>
#include <stdio.h>

// Return an approx to sin(pi/2 * x) where -1 <= x <= 1.
// In that range it has a max absolute error of 5e-9
// according to Hastings, Approximations For Digital Computers.
static double xsin (double x) {
  double x2 = x * x;
  return ((((.00015148419 * x2
             - .00467376557) * x2
            + .07968967928) * x2
           - .64596371106) * x2
          + 1.57079631847) * x;
}

int main () {
  double pi = 4 * atan (1);
  printf ("%.10f\n", xsin (0.77));
  printf ("%.10f\n", sin (0.77 * (pi/2)));
  return 0;
}


 类似资料:
  • 问题内容: 我正在开发一个数学解析器,它能够评估String 。我正在使用ANTLR进行解析,并取得了良好的进展。现在,我跌倒Java类并思考:嘿,为什么不在这里考虑精度。 我的问题是Java API没有为s like 提供三角函数。您是否知道是否有诸如Apache Commons这样的好数学库可以解决此问题? 另一个问题是如何实现幂方法,以便我可以用s 计算4.9 ^ 1.4 。这可能吗? 关于

  • 本文向大家介绍快速了解JAVA中的Random()函数,包括了快速了解JAVA中的Random()函数的使用技巧和注意事项,需要的朋友参考一下 Java中存在着两种Random函数: 一、java.lang.Math.Random;   调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪

  • 问题内容: 我正在尝试获取数百个远程图像的图像大小(图像尺寸,宽度和高度),而且速度太慢。 我做了一些阅读,发现最快的方法是从图像中读取一定数量的字节并检查二进制数据的大小。 有人尝试过吗?我将如何检查不同的格式?有人看到过任何图书馆吗? 问题答案: 测试… 640 x 480(0.20859s) 加载32kb数据对我有用。

  • 问题内容: 我经历了许多Angular-express种子,并弄清楚了它们是如何工作的。我遇到的问题是: 1)。 我想使用ejs-locals进行模板制作。 2)。 如何正确配置服务器端和客户端的路由。而且,在输入URL之类的时,不会产生错误: 角度 app.js 包含: Express app,js 包含: 路由文件夹 包含“ index.js”: Views文件夹 包含: 并且内部views文

  • Incremental Transcendence  增量超越是一款网页点击/放置类游戏,你需要在其中收集资源、发展自己的家园。 点击可玩 https://static.oschina.net/trytry/Incremental-Transcendence  

  • 您需要使用三角函数,就像计算移动物体的距离或角速度一样。 Arduino提供传统的三角函数(sin,cos,tan,asin,acos,atan),可以通过编写原型进行总结。 Math.h包含三角函数的原型。 三角精确语法 double sin(double x); //returns sine of x radians double cos(double y); //returns cosine