什么是好的策略/启发式来说服同情一个复杂的术语,包括三角函数是0?
例如,让我们考虑以下术语:
-2*a**2*b*(a**2 + b**2 + c**2)**(-12.0)*(a**2*(a**2 + b**2 + c**2)**9.0 + b**2*(a**2 + b**2 + c**2)**9.0 + c**2*(a**2 + b**2 + c**2)**9.0 - (a**2 + b**2 + c**2)**10.0)*sin(0.5*sqrt(a**2 + b**2 + c**2))**2
Wolfram alpha同意我的观点,它应该为零.
我想sympy.simplify还有sympy.trigsimp,但不知道下一个尝试的东西.
我正在使用python 3.6.3和sympy 1.1.1.
这个话题是有争议的,但是我相信,前提条件和类不变式应该由断言保护,如果违反了相应的SW组件的协定,则断言会终止程序-只要断言检查的运行时成本是不是性能瓶颈。
我真的很喜欢可选类型,并经常使用它们,但是对我而言,std :: optional的标准库实现目前不可用,因为首先对可选的取消引用不会执行检查其是否包含value,其次没有到目前为止,主要的c ++实现都在标准库函数中支持/实现断言。
从我多年来看到的std :: optional的使用中,我无法回忆起一个单个实例,其中std :: optional以这样的方式和数量使用,使得前提条件检查将成为性能瓶颈和令人望而却步。例如,我从未见过有人将遮罩图像实现为std:optional的数组。
我的问题:是否有提议(例如对于c ++ 22),它将合同功能添加到标准库中,特别是std :: optional?
是的,我知道异常会“保护” 值方法。首先,我不喜欢使用异常的非异常控制流(您是否曾经尝试调试过此类代码)。第二,我认为类型的强度和安全性应该通过其最弱的环节来判断。
我还不能发表评论,因此我在这里评论了Nicol Bolas的回答:
感谢您的回答,但坦率地说,我认为它不能回答我的问题。只是为了澄清。我不是在要求一项提议,要求对违反合同(“期望”关闭)的std :: abort进行调用。相反,我要问的是,在P0788提案之后,是否有任何计划将合同注释添加到标准库中。我同意该标准不应强制规定特定的实施方式应如何处理此类违约情况。