在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")) } }
相关推荐
Scala在运算时会自动进行类型提升,但精度下降可能导致错误。强制类型转换需要显式使用,例如`(int)x`。数值类型和字符串之间的转换也需要明确指定。关系运算符`==`在Scala中比较的是内容,而`.eq`比较的是引用。...
在数字信号处理领域,Chisel3提供了一套丰富的库,如FixedPoint类型,用于表示有符号或无符号的固定点数,这对于处理浮点运算的精度问题至关重要。此外,Chisel3还支持并行计算和流水线设计,这些都是 DSP 系统中...
1. **基础语法**:Scala的基础语法包括变量声明、常量定义、数据类型(如整型、浮点型、布尔型和字符串)以及表达式和语句的构造。理解这些是学习Scala的第一步,它们构成了程序的基本构建块。 2. **字符串**:...
Spire不仅包含了基本的整型(Int, Long)和浮点型(Double, Float),还提供了更精确的数值类型,如任意精度的整数(BigInt, BigRational)和浮点数(BigDecimal)。这些类型能够处理超大或超小的数值,以及需要高...
此外,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字符,用单引号包围。例如: ```...
此外,它还支持多数据类型,包括浮点和整数类型,以及半精度(FP16)和单精度(FP32)浮点运算,以平衡计算速度和精度。 在实际应用中,开发者可以使用LibND4J创建自定义的机器学习算法,或者与现有的深度学习框架...
而在GPU端,BIDMat采用CUDA(Compute Unified Device Architecture)编程模型,直接在GPU上执行计算任务,充分发挥GPU的浮点运算能力,显著提升计算速度。这对于处理大规模矩阵运算和机器学习模型训练来说,尤为重要...
1. RISC-V指令集:RISC-V架构的核心是其精简的指令集,包括I(整数)、M(乘除)、A(原子操作)、C(压缩指令)和F/D(单精度/双精度浮点)等变体。Sodor处理器可能实现了其中的一部分或全部。 2. RV32IMAC:这是...
3. **高精度数字( Arbitrary Precision Numbers)**:Lucuma Core可能提供高精度整数和浮点数类型,允许在需要更高精度的计算时避免浮点误差。 4. **特殊函数(Special Functions)**:Lucuma可能包含了诸如贝塞尔...
本地矩阵是指存储在单个机器上的矩阵,它们具有整型的行、列索引值和双精度浮点型的元素值。MLlib支持两种类型的本地矩阵:稠密矩阵(DenseMatrix)和稀疏矩阵(SparseMatrix)。 稠密矩阵 DenseMatrix:稠密矩阵会...
该库包含参数化的浮点单元,用于融合乘法加法运算,整数和浮点数之间的转换以及具有不同精度的浮点转换之间的转换。 警告:这些单元正在开发中。 它们可能还没有完全消除错误,也没有完全优化。重新编码格式该存储...