标签: arithmetic-expressions

int上的基本算术运算 - Java

我最近注意到Java在Java中的基本算术运算方面的特殊性.使用以下代码

byte a = 3;
byte b = 4;
byte c = a * b;
Run Code Online (Sandbox Code Playgroud)

我收到"类型不匹配"编译错误...

在Java基本的算术运算(+,-,*,/)只对基本数据类型的执行int和高阶(long,double,等),而在算术运算byteshort是第一投地int,然后评估?

java arithmetic-expressions

12
推荐指数
2
解决办法
1842
查看次数

let vs expr vs shell中的双括号算法

当我第一次学习shell脚本时,我看到很多let用于基本算术的例子,但后来我发现有些环境不是let内置的,而是支持使用expr(尽管速度明显较慢).

但是,例如,在许多shell中也可以使用双括号来执行算术运算$((54 + 102)).

由于我正在编写一个可移植性的脚本,这提供了一个可能性的雷区; 目前我正在使用两个不同的包装函数(一个用于let和一个用于expr),并使用快速测试来决定在我的其余脚本中使用哪个.

无论如何,我想知道的是,是否有人可以澄清这三个算术命令(以及我错过的任何其他算法命令)的兼容性.我希望双括号形式可能足够普通,我可以放弃兼容性检查,但搜索是一件很难的事情,所以我决定来这里并要求确定.

只是要注意我只对常规算术感兴趣,我想我已经涵盖了我可能需要使用的几个大整数.

math shell arithmetic-expressions

12
推荐指数
1
解决办法
2525
查看次数

基本减法中的Python错误?

可能重复:
Python舍入错误与浮点数
python数学是错误的

我不能让Python正确地做减法1 - 0.8并分配它.它一直提出错误的答案,0.19999999999999996.

我探讨了一下:

sq = {}
sub = {}
for i in range(1000):
    sq[str(i/1000.)+'**2']=((i/1000.)**2)
    sub['1-'+str(i/1000.)]=(1.0-(i/1000.))
Run Code Online (Sandbox Code Playgroud)

并发现这个错误发生在0到1到第三个小数位之间的一个随机的浮点组.当您对这些浮点数进行平方时,也会发生类似的错误,但会出现类似的错误.

我希望对此有一个解释,以及如何使Python正确运算.使用round(x,3)是我现在使用的解决方法,但它并不优雅.

谢谢!

这是我的Python 2.7.3 shell中的一个会话:

*** Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32. ***
*** Remote Python engine  is active ***
>>> 1-0.8
0.19999999999999996
>>> print 1-0.8
0.2
>>> a = 1-0.8
>>> a
0.19999999999999996
>>> print a
0.2
>>> a = 0.2
>>> print a
0.2
>>> a
0.2
>>> …
Run Code Online (Sandbox Code Playgroud)

python arithmetic-expressions subtraction

11
推荐指数
2
解决办法
2万
查看次数

算术C++运算符

我在技术访谈中刚问了一个问题,我有点困惑.

问题如下:

如果

int i = -1, int j = -1, and int k = -1, 
Run Code Online (Sandbox Code Playgroud)

我们运行以下行:

++i && ++j && ++k
Run Code Online (Sandbox Code Playgroud)

i,j和k的新值是什么?我感到困惑的原因是,因为我们没有将这个表达式赋值给任何东西,所以看起来并不像运算符应该有任何区别(只有增量运算符应该).然而,运行一个简单的测试程序很快证明我错了.有人可以向我解释这个,因为我之前从未见过这个练习.

c++ arithmetic-expressions

10
推荐指数
1
解决办法
567
查看次数

用于指定值约束的通用语言

我正在寻找一种定义文本表达式的通用方法,它允许验证值.

例如,我有一个值应该只设置为1,2,3,10,11或12.它的约束可以定义为: (value >= 1 && value <= 3) || (value >= 10 && value <= 12)

或者另一个可以是1,3,5,7,9等的值......会有像value % 2 == 1或那样的约束IsOdd(value).

(为了帮助用户更正无效值,我想显示约束 - 所以描述IsOdd性更好.)

这些约束将在客户端(用户输入之后)和服务器端进行评估.因此,多平台解决方案将是理想的(特别是Win C#/ Linux C++).

是否存在允许评估或解析类似简单表达式的现有语言/项目?

如果没有,我可以从哪里开始创建自己的?

我意识到这个问题有点模糊,因为我不完全确定我追求的是什么.搜索结果没有结果,因此即使某些术语作为起点也会有所帮助.然后我可以相应地更新/标记问题.

language-agnostic validation arithmetic-expressions

10
推荐指数
2
解决办法
224
查看次数

PHP不会在+和 - 符号之前回显文本

使用以下代码:

    $a=1;
    $b=1;
    echo $a."%".$b." maradéka: "." = ".$a % $b."<br>";
    echo $a."+".$b." összege: "." = ".$a + $b."<br>";
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

    1%1 maradéka: = 0
    2
Run Code Online (Sandbox Code Playgroud)

如您所见,+语法与%相同,但它不会在操作之前回显文本.也许我太累了或者我不知道,但我无法弄明白:D我到目前为止已经构建了动态网页,但是这个让我感到满意.

php arithmetic-expressions echo

10
推荐指数
1
解决办法
94
查看次数

Scala除以零会产生不同的结果

我对Scala处理除零的方式感到困惑.这是一个REPL代码片段.

scala> 1/0
java.lang.ArithmeticException: / by zero
  ... 33 elided

scala> 1.toDouble/0.toDouble
res1: Double = Infinity

scala> 0.0/0.0
res2: Double = NaN

scala> 0/0
java.lang.ArithmeticException: / by zero
  ... 33 elided

scala> 1.toInt/0.toInt
java.lang.ArithmeticException: / by zero
  ... 33 elided
Run Code Online (Sandbox Code Playgroud)

正如您在上面的示例中所看到的,取决于您如何除以零,您将获得以下之一:

  • "java.lang.ArithmeticException:/ by zero"
  • "双= NaN"
  • "Double = Infinity"

这使得调试非常具有挑战性,尤其是在处理未知特征的数据时.这种方法背后的原因是什么,甚至更好的问题,如何在Scala中以统一的方式处理除零?

java scala arithmetic-expressions divide-by-zero

10
推荐指数
2
解决办法
1235
查看次数

如何乘法/除/加/减不同类型的数字?

我正在研究Rust手册的第二版,并决定尝试制作经典的Celsius-to-Fahrenheit转换器:

fn c_to_f(c: f32) -> f32 {
    return ( c * ( 9/5 ) ) + 32;
}
Run Code Online (Sandbox Code Playgroud)

编译cargo build它将产生编译时错误:

error[E0277]: the trait bound `f32: std::ops::Mul<{integer}>` is not satisfied
 --> src/main.rs:2:12
  |
2 |     return (c * (9 / 5)) + 32;
  |            ^^^^^^^^^^^^^ the trait `std::ops::Mul<{integer}>` is not implemented for `f32`
  |
  = note: no implementation for `f32 * {integer}`
Run Code Online (Sandbox Code Playgroud)

作为一个新的Rust程序员,我的解释是我不能将float和integer类型相乘.我通过使所有常量浮点数解决了这个问题:

fn c_to_f(c: f32) -> f32 {
    return ( c * ( 9.0/5.0 ) ) + 32.0; …
Run Code Online (Sandbox Code Playgroud)

math arithmetic-expressions rust

10
推荐指数
1
解决办法
3337
查看次数

多个+和 - 运算符的Java优先级

这更像是理解Java对算术运算的评估的理论问题.由于+-具有相同的优先级,我不太明白Java如何评估以下表达式(两个操作数之间有多个+-运算符).

public static void main(String[] args) {
    int a = 1;
    int b = 2;
    System.out.println(a+-b);    // results in -1
    System.out.println(a-+b);    // results in -1
    System.out.println(a+-+b);   // results in -1
    System.out.println(a-+-b);   // results in  3
    System.out.println(a-+-+b);  // results in  3
    System.out.println(a+-+-b);  // results in  3
    System.out.println(a-+-+-b); // results in -1
    System.out.println(a+-+-+b); // results in  3
}
Run Code Online (Sandbox Code Playgroud)

从Java 8语言规范(第15.8.2节):

当应用于两个数值类型的操作数时,binary +运算符执行加法,产生操作数的总和.
二元 - 运算符执行减法,产生两个数字操作数的差异.
[...]
如果操作数表达式没有副作用,则Addition是一个可交换操作.
当操作数都是相同类型时,整数加法是关联的.

我还注意到,每次#operators都是偶数时,结果是相同的,顺序无关紧要.但是当#operators是奇数时,这并不一定会影响结果.例如,在以下两个表达式有一个更-+ …

java evaluation arithmetic-expressions

9
推荐指数
1
解决办法
289
查看次数

Python 十进制 - 乘以零

为什么下面的代码会这样:

from decimal import Decimal
result = Decimal('0') * Decimal('0.8881783462119193534061639577')
print(result)
Run Code Online (Sandbox Code Playgroud)

返回0E-28

我已将其追溯到模块中的以下代码:

if not self or not other:
    ans = _dec_from_triple(resultsign, '0', resultexp)
    # Fixing in case the exponent is out of bounds
    ans = ans._fix(context)
    return ans
Run Code Online (Sandbox Code Playgroud)

该代码似乎遵循十进制算术规范,它没有明确建议当我们乘以零时要做什么,指的是另一个标准中的“特殊数字” ,它也没有指定当我们将整数乘以零时我们要做什么:) 所以十进制库做了明确指定的事情:

  • 在舍入之前,结果的系数是通过将操作数的系数相乘来计算的。
  • 四舍五入之前结果的指数是两个操作数的指数之和。
  • 结果的符号是操作数符号的异或。

问题:如果其中一个操作数为零,需要返回系数和指数(即0E-28)吗?在调用乘法函数时我们已经知道该系数是多少。为什么不直接返回零呢?

python arithmetic-expressions decimal

9
推荐指数
1
解决办法
352
查看次数