我想测试一个数字是正数还是负数,特别是在零的情况下.IEEE-754允许-0.0,并在Python中实现.
我能找到的唯一解决方法是:
def test_sign(x):
return math.copysign(1, x) > 0
Run Code Online (Sandbox Code Playgroud)
也许(可能需要更长时间才能运行):
def test_sign(x):
math.atan2(x, -1)
Run Code Online (Sandbox Code Playgroud)
在常规库中的任何地方都找不到专用函数,我忽略了什么吗?
编辑:(为什么这是相关的)
这不是我目前的计划了,但问这个问题时,我试图超载根据参数值是否是正面或负面的功能.允许用户通过负零就解决了歧义什么意思零值输入.我认为这对其他用例也可能是普遍感兴趣的.
为什么这段java代码会产生正无穷大?
double d = 10.0 / -0;
System.out.println(d);
if (d == Double.POSITIVE_INFINITY)
System.out.println("Positive Infinity");
else
System.out.println("Negative Infinity");
Run Code Online (Sandbox Code Playgroud) 这个问题更多的是好奇心.
我正在创建以下数组:
A = zeros((2,2))
for i in range(2):
A[i,i] = 0.6
A[(i+1)%2,i] = 0.4
print A
>>>
[[ 0.6 0.4]
[ 0.4 0.6]]
Run Code Online (Sandbox Code Playgroud)
然后,打印它:
for i,c in enumerate(A):
for j,d in enumerate(c):
print j, d
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除j,我得到:
>>>
0 0.6
1 0.4
0 0.4
1 0.6
Run Code Online (Sandbox Code Playgroud)
但如果我从for中删除j,我得到:
(0, 0.59999999999999998)
(1, 0.40000000000000002)
(0, 0.40000000000000002)
(1, 0.59999999999999998)
Run Code Online (Sandbox Code Playgroud)
这是因为我用0.6创建矩阵的方式?它如何代表内部真实价值?
在下面的Coq代码片段中(从一个真实的例子中删除),我试图将第一个参数声明exponent_valid为隐式:
Require Import ZArith.
Open Scope Z.
Record float_format : Set := mk_float_format {
minimum_exponent : Z
}.
Record float (fmt : float_format) : Set := mk_float {
exponent : Z;
exponent_valid : minimum_exponent fmt <= exponent
}.
Arguments exponent_valid {fmt} _.
Run Code Online (Sandbox Code Playgroud)
据我所知,该exponent_valid函数有两个参数:一个是类型float_format,一个是类型float,第一个可以推断出来.但是,编译上面的代码段失败,并显示以下错误消息:
File "/Users/mdickinson/Desktop/Coq/floats/bug.v", line 13, characters 0-33:
Error: The following arguments are not declared: _.
Run Code Online (Sandbox Code Playgroud)
事实上,将Arguments声明更改为:
Arguments exponent_valid {fmt} _ _.
Run Code Online (Sandbox Code Playgroud)
使错误消息消失.
没关系; 我是Coq的新手,我完全相信我忽略了一些东西.但是现在我真的很困惑我:如果我用a 替换<= …
出现默认Python round(1 / 2)给出0.
如何循环浮动0.5到1.0,同时仍然四舍五入到0.45到0.0,正如通常的学校四舍五入?
注意:很抱歉删除并再次发布此内容,但它被错误地标记为另一个问题的副本.
最近,我对在浮点数上使用位移位进行一些快速计算很感兴趣。
为了让它们以更通用的方式工作,我想让我的函数使用不同的浮点类型,可能是通过模板,不仅限于floatand double,还有“半宽”或“四倍宽”浮点数等等.
然后我注意到:
- Half --- 5 exponent bits --- 10 signicant bits
- Float --- 8 exponent bits --- 23 signicant bits
- Double --- 11 exponent bits --- 52 signicant bits
Run Code Online (Sandbox Code Playgroud)
到目前为止,我认为exponent bits = logbase2(total byte) * 3 + 2,
这意味着 128 位浮点数应该有 14 个指数位,而 256 位浮点数应该有 17 个指数位。
然而,后来我了解到:
- Quad --- 15 exponent bits --- 112 signicant bits
- Octuple--- 19 exponent bits --- 237 signicant bits
Run Code Online (Sandbox Code Playgroud)
那么,有没有一个公式可以找到它?或者,有没有办法通过一些内置函数来调用它?
C 或 …
我尝试(在PHP中)读取两个字节(16位)的二进制补码值并返回一个带符号的十进制数.
我不确定这两个恭维数学应该如何工作,但是从php.net,我设法得到它几乎显示我的期望.我认为我遇到的问题是我没有得到任何负面价值.
我有以下代码:
function _bin16dec($bin) {
// Function to convert 16bit binary numbers to integers using two's complement
$num = bindec($bin);
if($num > 0xFFFF) { return false; }
if($num >= 0x8000) {
return -(($num ^ 0xFFFF)+1);
} else {
return $num;
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码是有人在网上提出的,但它在python中不明白.
def twoscomp( x ) :
"This returns a 16-bit signed number (two's complement)"
if (0x8000 & x):
x = - (0x010000 - x)
return x
Run Code Online (Sandbox Code Playgroud)
应用程序从陀螺仪中为2的补码形式中的每个轴读取两个字节.
提前致谢!
山姆
我知道在 Python 中读取 C double 值存在问题。在我的程序中,我从二进制文件中读取并将数值转换为各种大小的整数,没有问题。我使用下面的代码来读取双精度值。
peakDescriptor["area"] = struct.unpack("d",file.read(8))
Run Code Online (Sandbox Code Playgroud)
价值观应该是什么和我得到什么之间存在巨大差异。下面的第一个表是我所得到的:
甲烷3.6368230562528605e-307
乙烷-8.243249632731949e + 306
丙烷1.839329701286865e-60
2-甲基-2.55127317345224e-306
丁烷3.737451552798833e + 59
...
该表显示,这些值应该是:
甲烷 97.25
乙烷 426.50
丙烷 2755.60
2-甲基丙烷 3390.25
丁烷 10906.60
...
如何正确读取这些数字?
我的代码可以在这里找到
如果您在访问文件时遇到问题,请告诉我!
PS我已经尝试根据结构文档更改格式字符串以包含“>”符号 - 这仍然会导致意外值以及一些NaN!
当Python 3中的尾随小数点> = 0.5时,math.ceil()和round()之间的算法区别是什么?
例如,
round(9.5) = 10
round(9.67) = 10
math.ceil(9.5) = 10
math.ceil(9.5) = 10
Run Code Online (Sandbox Code Playgroud) 想象一下,我们有一个股票清单:
stocks = ['AAPL','GOOGL','IBM']
Run Code Online (Sandbox Code Playgroud)
具体的股票并不重要,重要的是我们在这个清单中有n个项目.
想象一下,我们还有一个权重列表,从0%到100%:
weights = list(range(101))
Run Code Online (Sandbox Code Playgroud)
给定n = 3(或任何其他数字),我需要生成一个矩阵,其中每个可能的权重组合总和达到100%.例如
0%, 0%, 100%
1%, 0%, 99%
0%, 1%, 99%
etc...
Run Code Online (Sandbox Code Playgroud)
是否有一些itertools的方法可以做到这一点?什么东西在numpy?最有效的方法是什么?