我应该Math.round(1/2)
在Java中声明为int还是double?如果两者都很好,哪个更正确?
另外,为什么Eclipse告诉我Math.round(1/2)= 0.0,而Math.round(0.5)= 1.0?
任何帮助,将不胜感激!
我正在为Haskell中的Fraction数据类型创建一堆实例,我想知道是否有一个地方可以实现^
运算符.
我的意思是,我有不同的几个实例Num
类型和这些实例中,我定义了常见的操作,如+
,-
等.
有了它,数据类型就像我想要的那样表现为正常数字(意思是我可以调用类似的东西(Frac 1 2) + (Frac 1 4)
并返回Frac 3 4
)
我想要做的是^
直接实施.现在,我已经将它定义为:
(|^|) :: Fraction -> Int -> Fraction
(|^|) f = foldr (*) mempty . flip replicate f
Run Code Online (Sandbox Code Playgroud)
当我尝试将函数的名称更改^
为时,我收到错误,因为它与Prelude的定义冲突^
.是否有一种Num
类型我可以给我的Fraction
类型一个实例允许我^
在其上使用运算符?
谢谢!
使用fractions
库MASS中的函数,我可以将小数转换为分数:
> fractions(.375)
[1] 3/8
Run Code Online (Sandbox Code Playgroud)
但那么如何提取分子和分母呢?帮助fractions
提到了一个属性"压裂",但我似乎无法访问它.
如何编写一个算法,给定一个浮点数,并尝试使用分子和分母(两者都限制在 Java 字节的范围内)尽可能准确地表示?
原因是 I2C 设备需要分子和分母,而给它一个浮点数是有意义的。
例如,3.1415926535...
将导致245/78
, 而不是314/100
或22/7
。
就效率而言,在程序开始时会调用大约三次,但之后就不再调用了。所以慢的算法也不算太糟糕。
是否有一种简单的方法来(尝试)合理化给定 delta 中表达式中的所有数值,就像Rationalize[]
在 Mathematica 中一样?
Mathematica 中的一个例子:
In[25]:= Rationalize[0.5 x^2 - 3.333333 x, 10^-4]
Out[25]= x^2/2-(10 x)/3
Run Code Online (Sandbox Code Playgroud)
我看到了这个nsimplify()
功能,但这似乎有点矫枉过正。
我有这个Rational类,每个操作都有一个方法(add,mult等)
function Rational(nominator, denominator){
this.nominator = nominator;
this.denominator = denominator || 1;
}
Rational.prototype = {
mult: function(that) {
return new Rational(
this.nominator * that.nominator,
this.denominator * that.denominator
);
},
print: function() {
return this.nominator + '/' + this.denominator;
}
};
var a = new Rational(1,2),
b = new Rational(3);
console.log( a.mult(b).print() ); // 3/2
Run Code Online (Sandbox Code Playgroud)
我可以让它更"自然",例如启用console.log( a * b )
吗?
javascript dsl operator-overloading fractions prototypal-inheritance
我想在Python 3中编写一个函数,它将作为分子和分母给出的分数转换为它们的字符串表示形式,作为十进制数,但在括号中包含重复的小数位.
一个例子:
convert(1, 4)
应该输出 "0.25"
convert(1, 3)
应输出"0.(3)"
而不是"0.3333333333"
convert(7, 11)
应输出"0.(63)"
而不是"0.6363636364"
convert(29. 12)
应输出"2.41(6)"
而不是"2.4166666667"
我当前的代码在问题的最后,但如果有非重复和重复的小数位,它将失败.这是一个包含调试输出(注释print
调用)的示例运行:
----> 29 / 12
5
appended 4
2
appended 1
8
index 2 ['29', 2, 8] result ['2.', '4', '(', '1']
repeating 8
['2.', '4', '(', '1', ')']
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我的代码:
def convert(numerator, denominator):
#print("---->", numerator, "/", denominator)
result = [str(numerator//denominator) + "."]
subresults = [str(numerator)]
numerator %= denominator
while numerator …
Run Code Online (Sandbox Code Playgroud) 我编写了这段代码来计算使用欧几里德算法的有理数N的连续分数展开:
from __future__ import division
def contFract(N):
while True:
yield N//1
f = N - (N//1)
if f == 0:
break
N = 1/f
Run Code Online (Sandbox Code Playgroud)
如果说N是3.245,则函数永远不会结束,因为显然f永远不等于0.扩展的前10个术语是:
[3.0,4.0,12.0,3.0,1.0,247777268231.0,4.0,1.0,2.0,1.0]
这显然是一个错误,因为实际扩展只是:
[3; 4,12,3,1]或[3; 4,12,4]
是什么原因引起了这个问题?这是某种舍入错误吗?
python division integer-division fractions continued-fractions
当使用fraction.Fraction
在F-字符串我希望能够格式化为一个float
。但是我得到了TypeError
:
from fractions import Fraction
f = Fraction(11/10)
f'{f} as float {f:.3f}'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported format string passed to Fraction.__format__
Run Code Online (Sandbox Code Playgroud)
似乎可以/应该支持浮点格式规范Fractions
。
有趣的是,它们用于Decimal
:
from decimal import Decimal
f = Decimal('1.1')
f'{f} as float {f:.3f}'
Run Code Online (Sandbox Code Playgroud)
这有什么原因不起作用Fraction
吗?
是的,我知道我可以做,f'{f} as float {float(f):.3f}'
但是我在问为什么要这样做。
我最近遇到了一个问题,我在 MSVC 中遇到了段错误,而在 GCC 中却没有。
几个小时后,我意识到显然我的 MSVC 版本不支持以下语法:
double value = 3.4;
double fractional = std::modf(value, nullptr);
Run Code Online (Sandbox Code Playgroud)
我不想要/关心数字的整个部分。
是的,我知道我可以做“3.4 - 3.0”之类的,但我担心以这种方式专门使用 modf。目前我只能通过以下方式看到这样做:
double temp;
double value = 3.4;
double fractional = std::modf(value, &temp);
Run Code Online (Sandbox Code Playgroud)
有没有办法绕过这个临时变量?