草庐IT

java - Java 浮点基元是否有任何 IEEE 754 标准实现?

coder 2024-03-06 原文

我对 Java 是否使用 IEEE 754 标准来实现其浮点运算感兴趣。 Here我在文档中看到了这种东西:

operation defined in IEEE 754-2008

据我所知,IEEE 754 的积极方面是提高浮点运算的精度,因此如果我在 Java 中使用 doublefloat,计算的精度将相同和 BigDecimal 一样吗?如果不是,那么在 Math 中使用 IEEE 754 标准有什么意义呢?类(class)?

最佳答案

I'm interested if Java is using IEEE 754 standard for implementing it's floating point arithmetic.

IEEE-754 定义了多个 浮点类型的标准。多年来,它们都是二进制 float ;这就是 Java 的 floatdouble 是:float 是一个 32 位 IEEE-754 二进制浮点值(标准称为 binary32 ). double 是 64 位的(标准称为 binary64 )。这些二进制 float 对于计算机来说计算效率很高,但是因为它们以二进制工作而我们以十进制工作,所以存在一些期望不匹配;例如,0.1 不能精确地存储在 double 中,您会得到像 0.1 + 0.2 这样的奇怪结果,结果是 0.30000000000000004。参见 Is floating point math broken?了解详情。例如,它们不是财务计算的好选择。

BigDecimal 是一个 Java 类,它以任意精度实现 decimal 小数。它比使用 double 慢得多,但结果符合我们对小数的期望(例如,0.1 + 0.2 将是 0.3) .

IEEE-754 的 2008 版增加了重要的新格式,特别是 decimal32 , decimal64 , 和 decimal128 .这些是十进制 float ,因此它们的工作方式与我们相同。 0.1可以准确的存储在一个decimal64中。 0.1 + 0.2decimal64 中是 0.3。但是,据我所知,它们与您的问题并不相关。

由于 BigDecimal 早于 IEEE-754 2008(在一定程度上),它定义了自己的语义。

And if not than what's the point of using IEEE 754 standard in Math class?

JDK9 向 Math 添加了新的操作,这些操作执行 IEEE-754 2008 规范定义的操作(例如 fma ,它执行 fused multiply-add ),因此它通过引用定义了这些操作为清楚起见,符合 IEEE-754 2008 规范。

更多阅读:

关于java - Java 浮点基元是否有任何 IEEE 754 标准实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40300041/

有关java - Java 浮点基元是否有任何 IEEE 754 标准实现?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  6. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  7. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  8. ruby - 检查日期是否在过去 7 天内 - 2

    我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

  9. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  10. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

随机推荐