2014-07-10 79 views
0

我試圖檢查double(time)> 1是否可以被另一個double(samplePeriod)> 0並且< 1整除1.以下代碼有效對於samplePeriods> 1,但不是< 1.任何想法?謝謝。檢查一個double> 1是否被double整除<1

/// <summary> 
    /// Check if a sample is within 1/10 of a samplePeriod from being on a samplePeriod 
    /// </summary> 
    /// <param name="time"> The time of the sample </param> 
    /// <param name="samplePeriod"> The period between samples </param> 
    /// <returns> True if the sample is on a sample period, false if not </returns> 
    public static bool SampleIsOnSamplePeriod(double time, double samplePeriod) 
    { 
     if (Math.Abs(time%samplePeriod - 0d) > (samplePeriod/10)) 
     { 
      return false; 
     } 
     return true; 
    } 
+2

要清楚 - 你想知道除法結果'a'和'b'是否是_whole number_,對嗎? –

+1

你怎麼定義「可分割」?雙打是C#中的浮點數,所以「完全可分」將是非常罕見的。 –

+0

不完全。採樣週期可以是介於0和1之間的任何數字。應用程序是數據採集,我按照給定的頻率採集數據,我們會說10 Hz。 10 Hz採樣間隔爲0.1秒(1/freq)。所以,我想看看當前時間「時間」是否在0.1秒的增量上。允許的誤差是採樣週期的十分之一,因此時間可以在±0.01以內並被認爲是真實的。 +/- 0.01以外的值將是錯誤的。 – user2419860

回答

0
public static bool SampleIsOnSamplePeriod(double time, double samplePeriod) 
{ 
    double mod1 = (time/samplePeriod) % 1; 
    return (mod1 < .1) || (mod1 > .9); 
} 

基本上你是將timesamplePeriod,然後通過1做一個MOD如果是「關閉足夠「,則此值應介於0和0.1之間或0.9和1之間。

檢查的左側正在檢查[0,0.1]。右側是[0.9,1]。

+0

完美,謝謝。 – user2419860

+0

@ user2419860不客氣! – Jashaszun

+0

這個答案不起作用,因爲'mod1'已經被'sameplePeriod'除。它應該與'0.1'和​​'0.9'進行比較,而不是'samplePeriod/10'和'1 - (samplePeriod/10)'。 –

1

在閱讀您的評論「允許的誤差是樣本期間的1/10,因此時間可以在+/- 0.01之內被認爲是真實的。 。爲+/- 0.01之外的值會是假的」,我真的覺得你想要的:

if ((time%samplePeriod > samplePeriod*0.9d) || (time%samplePeriod < samplePeriod*0.1d) 
0
public static bool SampleIsOnSamplePeriod(double time, double samplePeriod) 
{ 
    var d = time/samplePediod; 
    return Math.Abs(d - Math.Round(d)) <= 0.1; 
} 
相關問題