`
flyfoxs
  • 浏览: 297764 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Scala浮点运算精度问题

 
阅读更多

在Spark开发的时候,直接使用java.math.BigDecimal进行浮点相乘的时候,依然有精度缺失.但是如果是纯JAVA就没有,在Scala中调用JAVA的BigDecimal就有这样的问题.

 

偶然之间发现Scala也实现了scala.math.BigDecimal. 换用SCALA自身的BigDecimal就没这样的问题了.

 

不知道深层次的原因,在这抛砖引玉,如果有人知道的,请赐教.

 

 

下面是实验代码.

 

package com.cisco.test
import java.math.BigDecimal

object TestSyntax {
  def main(args: Array[String]): Unit = {
    val local_price=new BigDecimal(0.015)
    val exchange_rate = new BigDecimal(2)
    //0.02999999999999999888977697537484345957636833190917968750
    println(local_price.multiply(exchange_rate))

    //0.030
    import scala.math.BigDecimal
    println(BigDecimal("0.015") *  BigDecimal("2"))

    println(BigDecimal("0.0") *  BigDecimal("0.751879699"))
  }
}

 

0
1
分享到:
评论
1 楼 regale 2016-10-16  
java用的double,scala用的String,要精确,请用String.

相关推荐

    scala语言的学习记录

    Scala在运算时会自动进行类型提升,但精度下降可能导致错误。强制类型转换需要显式使用,例如`(int)x`。数值类型和字符串之间的转换也需要明确指定。关系运算符`==`在Scala中比较的是内容,而`.eq`比较的是引用。...

    用于数字信号处理的Chisel3工具库_Scala_Verilog_下载.zip

    在数字信号处理领域,Chisel3提供了一套丰富的库,如FixedPoint类型,用于表示有符号或无符号的固定点数,这对于处理浮点运算的精度问题至关重要。此外,Chisel3还支持并行计算和流水线设计,这些都是 DSP 系统中...

    Scala编程实战.rar

    1. **基础语法**:Scala的基础语法包括变量声明、常量定义、数据类型(如整型、浮点型、布尔型和字符串)以及表达式和语句的构造。理解这些是学习Scala的第一步,它们构成了程序的基本构建块。 2. **字符串**:...

    spire:Scala强大的新数字类型和数字抽象

    Spire不仅包含了基本的整型(Int, Long)和浮点型(Double, Float),还提供了更精确的数值类型,如任意精度的整数(BigInt, BigRational)和浮点数(BigDecimal)。这些类型能够处理超大或超小的数值,以及需要高...

    RISC-V “Rocket Chip” SoC Generator in Chisel

    此外,Tile还可以包括其他功能单元,比如RoCC(Rocket Chip Custom Coprocessor)加速器、浮点运算单元(FPU)等。 2. **Uncore**: Uncore部分负责处理整个芯片的外存系统,包括一致性代理(Coherence Agent)、...

    简单的递归算法

    4. **数学公式**:对于斐波那契数列,存在闭合形式的解,即著名的Binet公式,虽然在实际编程中应用较少,因为它涉及浮点运算,可能会带来精度损失。 总之,递归算法是计算机科学中一种强大且灵活的工具,但在具体...

    标量练习

    2. **浮点型(Double)**:Scala的浮点型也是与Java一致,是64位的双精度浮点数。例如: ```scala val doubleExample = 3.14159 ``` 3. **字符型(Char)**:Scala的字符类型是Unicode字符,用单引号包围。例如: ```...

    cpp-LibND4J是科学计算库ND4J的C引擎

    此外,它还支持多数据类型,包括浮点和整数类型,以及半精度(FP16)和单精度(FP32)浮点运算,以平衡计算速度和精度。 在实际应用中,开发者可以使用LibND4J创建自定义的机器学习算法,或者与现有的深度学习框架...

    BIDMat—支持大规模探索性数据分析的CPU和GPU加速矩阵库

    而在GPU端,BIDMat采用CUDA(Compute Unified Device Architecture)编程模型,直接在GPU上执行计算任务,充分发挥GPU的浮点运算能力,显著提升计算速度。这对于处理大规模矩阵运算和机器学习模型训练来说,尤为重要...

    riscv-sodor-master.zip

    1. RISC-V指令集:RISC-V架构的核心是其精简的指令集,包括I(整数)、M(乘除)、A(原子操作)、C(压缩指令)和F/D(单精度/双精度浮点)等变体。Sodor处理器可能实现了其中的一部分或全部。 2. RV32IMAC:这是...

    lucuma-core:Lucuma数学班

    3. **高精度数字( Arbitrary Precision Numbers)**:Lucuma Core可能提供高精度整数和浮点数类型,允许在需要更高精度的计算时避免浮点误差。 4. **特殊函数(Special Functions)**:Lucuma可能包含了诸如贝塞尔...

    Spark MLlib矩阵(基本数据类型).pdf

    本地矩阵是指存储在单个机器上的矩阵,它们具有整型的行、列索引值和双精度浮点型的元素值。MLlib支持两种类型的本地矩阵:稠密矩阵(DenseMatrix)和稀疏矩阵(SparseMatrix)。 稠密矩阵 DenseMatrix:稠密矩阵会...

    berkeley-hardfloat

    该库包含参数化的浮点单元,用于融合乘法加法运算,整数和浮点数之间的转换以及具有不同精度的浮点转换之间的转换。 警告:这些单元正在开发中。 它们可能还没有完全消除错误,也没有完全优化。重新编码格式该存储...

Global site tag (gtag.js) - Google Analytics