我目前正在尝试解决涉及不同重叠值范围的编程问题。任务是接受E-notation中的输入,这是不可避免地发生范围重叠的地方。
我有2个范围在1E-11处重叠。 1E-11和更低,1E-11和更高 输出将是1E-11是x或者是y。我会以编程方式解决这个问题:
(X_MIN would be 1E-11 and X_MAX 1E-8)
(Y_MAX would be 1E-11 and Y_MIN 1E-13)
(lengthOfRange <= X_MIN) && (lengthOfRange >= Y_MAX) ?
cout << "This value entered indicates that it is x\n" :
cout << "It is y";
以这种方式表达如果我输入IE-11它会显示我&#34;输入的值表示...&#34;但永远不会告诉我它是y(可以理解 - 重叠!)
另一种方式是用这种方式表达:
(lengthOfRange <= X_MIN) && (lengthOfRange != Y_MAX) ?
cout << "This value entered indicates that it is x\n" :
cout << "It is y";
输出总是&#34; ...是y ...&#34; (相同的差异 - 重叠!)没有其他决定因素可以告诉范围是x或y现在正在那里进行比赛。
...
if (lengthOfRange <= X_MIN) && (lengthOfRange == Y_MAX)
{
cout << "The input indicates that it could be either x or y\n";
}
...
即使我以某种方式解决问题,例如用不同的值定义范围,最终也会导致同样的问题。我可以将MIN和MAX定义为lengthOfFrequency中的常量,这是完全不同的,然后我将不得不说:lengthOfFrequency = 1E-11;再次瞧瞧同样的问题。 1输入2范围在技术上是不同的,获得相同的一个,只有正确的E-not值。
有没有办法绕过这个而不涉及简单地说输入是x || ÿ?从技术上来说当然是这样,如果要在物理上解决这个问题,就可以分辨出1E-11不是1E-11,尽管它是1E-11。 (我希望我在这里有意义)。但是,再次,...有这样的方式,我将如何写它? (没有特别要求代码虽然它非常受欢迎,只是指向正确的方向。)或者我应该说输入是x || ÿ?
提前感谢您的回答!
**Minimum Complete Code:**
#include <iostream>
using std::cout;
using std::cin;
int main()
{
/* Constants for ranges, min and max */
const double X_RAYS_MIN = 1E-13,
X_RAYS_MAX = 1E-11,
Y_RAYS_MIN = 1E-11,
Y_RAYS_MAX = 1E-8,
Z_RAYS_MIN = 1E-7,
Z_RAYS_MAX = 3.8E-7;
double lengthOfRange;
/* Test output and validation */
cout << "Enter value in scientifc notation: ";
cin >> lengthOfRange;
/* X_RAYS_MIN < is 1E-14, 1E-15, 1E-16 etc. > 1E-12, 1E-11 etc.. */
if (lengthOfRange >= X_RAYS_MIN && lengthOfRange <= X_RAYS_MAX)
{
cout << "X_RAYS\n";
}
else if (lengthOfRange >= Y_RAYS_MIN && lengthOfRange <= Y_RAYS_MAX)
{
cout << "Y_RAYS\n";
}
system("pause");
return 0;
}
输出为:1E-10为Y_RAYS,1E-9为Y_RAYS,1E-11为X_RAYS,1E-12为X_RAYS
不知怎的,我自己找到了解决问题的方法而没有采用任何迂回的方式......将鼠标悬停在1E-13上:
X_RAYS_MIN = 1E-13
VS显示我1.(numberofzeros)3E-13,并猜测...如果1E-11的输入是2E-11,则X_RAYS的输出变为Y_RAYS ...所以问题&#34;神奇&#34;解决了自己... 幸运我我想...... :)